Download

You can download a minimized version of the library or get the full source code at github.com.

Download source

Install with npm

$ npm install fileup-js

Требования

Для корректной работы на странице необходимо наличие: jquery
Для стилизации используется фреймворк bootstrap

Examples

Simple upload

Select file

        <div class="btn btn-success fileup-btn">
            Select file
            <input type="file" id="upload1">
        </div>

        <div id="upload1-queue""></div>


        <script>
            fileUp.create({
                url: '/file/upload',
                input: 'upload1',
                queue: 'upload1-queue',
                onSuccess: function(file, response) {
                    alert('Upload success');
                },
                onError: function(errorType, options) {
                    alert('Upload error');
                }
            });
        </script>


Multiple upload

Select files

        <div id="multiple">
            <div class="btn btn-success fileup-btn">
                Select files
                <input type="file" id="upload2" multiple>
            </div>

            <button onclick="fileUp.get('multiple').uploadAll()"
                    class="btn btn-link" type="button" style="display: none">
                Upload all
            </button>
            <button onclick="fileUp.get('multiple').removeAll()"
                    class="btn btn-link" type="button" style="display: none">
                Remove all
            </button>

            <div id="upload2-queue"></div>
        </div>

        <script>
            fileUp.create({
                id: 'multiple',
                url: '/file/upload',
                input: 'upload2',
                queue: 'upload2-queue',
                lang: 'en',
                onSelect: function(file) {
                    $('#multiple button').show();
                },
                onRemove: function(file) {
                    if (Object.keys(this.getFiles()).length === 0) {
                        $('#multiple button').hide();
                    }
                },
                onSuccess: function(file, response) {
                    alert('Upload success');
                },
                onError: function(errorType, options) {
                    alert('Upload error');
                }
            });
        </script>


Upload images

Select images

        <div class="btn btn-success fileup-btn">
            Select images
            <input type="file" id="upload3" multiple accept="image/*">
        </div>

        <div id="upload3-queue"></div>


        <script>
            fileUp.create({
                url: '/file/upload',
                input: 'upload3',
                queue: 'upload3-queue',
                autostart: true,
                filesLimit: 3,
                sizeLimit: 1048576 // 1 Mb
            });
        </script>


Dropzone

Drop your files here or click
Maximum file size 50Mb

    <input type="file" id="upload4" multiple style="display: none">

    <div id="upload4-dropzone" class="fileup-dropzone p-4 d-inline-block text-primary-emphasis fs-5 rounded-4 text-center">
        <i class="bi bi-folder2-open"></i> Drop your files here or click
        <div class="fs-6 mt-2">Maximum file size 50Mb</div>
    </div>

    <div id="upload4-queue"></div>

    <script>
        let fileUpDrop = fileUp.create({
            url: '/file/upload',
            input: 'upload4',
            queue: 'upload4-queue',
            dropzone: 'upload4-dropzone',
        })

        fileUpDrop.on('load_success', function(file, response) {
            alert('Upload success');
        });
        fileUpDrop.on('error', function(errorType, options) {
            alert('Upload error');
        });

        fileUpDrop.on('dragEnter', function(event) {
            console.log('dragEnter');
        });
        fileUpDrop.on('dragLeave', function(event) {
            console.log('dragLeave');
        });
        fileUpDrop.on('dragEnd', function(event) {
            console.log('dragEnd');
        });
    </script>


Uploaded

Select files

        <div class="btn btn-success fileup-btn">
            Select files
            <input type="file" id="upload5" multiple>
        </div>

        <div id="upload5-queue"></div>

        <script>
            fileUp.create({
                url: '/file/upload',
                input: 'upload5',
                queue: 'upload5-queue',
                files: [
                    {
                        name: 'Cat.jpg',  // required
                        size: 254361',
                        urlPreview: 'src/img/preview/cat.jpg',
                        urlDownload: 'img/cat.jpg',
                    },
                    {
                        name: 'Flower.jpg',  // required
                        size: 924160,
                        urlPreview: 'src/img/preview/flower.jpg',
                        urlDownload: 'img/flower.jpg',
                    },
                    {
                        name: 'FileUp.zip',
                        size: 23040,
                        urlDownload: 'https://github.com/n2ref/fileup/archive/master.zip'
                    }
                ]
            });
        </script>


File template

Select files

        <div class="fileup-theme2">
            <div class="btn btn-btn-success fileup-btn">
                Select files
                <input type="file" id="upload6" multiple>
            </div>

            <div id="upload6-queue" class="d-flex flex-wrap gap-2 mt-3"></div>
        </div>


        <script>
            fileUp.create({
                url: '/file/upload',
                input: 'upload6',
                queue: 'upload6-queue',
                files: [
                    {
                        name: 'Cat.jpg', // required
                        size: 254361,
                        urlPreview: 'src/img/preview/cat.jpg',
                        urlDownload: 'img/cat.jpg',
                    },
                    {
                        name: 'Flower.jpg', // required
                        size: 924160,
                        urlPreview: 'src/img/preview/flower.jpg',
                        urlDownload: 'img/flower.jpg',
                    },
                    {
                        name: 'FileUp.zip'
                    }
                ],
                templateFile:
                    '<div style="width:125px" class="fileup-file [TYPE] mb-2 p-1 d-flex flex-column gap-2 bg-light border border-secondary-subtle rounded rounded-1">' +
                        '<div class="fileup-preview">' +
                            '<img src="[PREVIEW_SRC]" alt="[NAME]" class="border rounded"/>' +
                            '<i class="fileup-icon fs-4 text-secondary"></i>' +
                        '</div>' +
                        '<div class="flex-fill">' +
                            '<div class="fileup-description">' +
                                '<span class="fileup-name">[NAME]</span> ' +
                                '<small class="fileup-size text-nowrap text-secondary">([SIZE])</small>' +
                            '</div>' +
                            '<div class="fileup-controls mt-1 d-flex gap-2">' +
                                '<span class="fileup-remove" title="[REMOVE]">✕</span>' +
                                '<span class="fileup-upload link-primary">[UPLOAD]</span>' +
                                '<span class="fileup-abort link-primary" style="display:none">[ABORT]</span>' +
                            '</div>' +
                            '<div class="fileup-result"></div>' +
                            '<div class="fileup-progress progress mt-2 mb-1">' +
                                '<div class="fileup-progress-bar progress-bar"></div>' +
                            '</div>' +
                        '</div>' +
                    '</div>'
            });
        </script>


Options

Name type default description
id string uniq hash Уникальный идентификатор экземпляра
url string Адрес, на который будут загружены файлы
input HTMLElement|string Идентификатор или объект с элементом input[type=file]
queue HTMLElement|string Идентификатор или объект с элементом, в котором будет размещен список с файлами
dropzone HTMLElement|string Идентификатор или объект с элементом, в который можно перетаскивать файлы для загрузки
fieldName string file Имя переменной, в которую должен быть загружен файл
files array Массив загруженных ранее файлов
extraFields object Дополнительные переменные, которые нужно загрузить вместе с файлом
showRemove bool true Признак для отображения кнопки закрытия у файлов
lang string en Язык интерфейса, двухзначный ключ
langItems object Список ключевых фраз и их переводов. Может использоваться для корректировки фраз с переводом у какого либо языка или для добавления своего перевода
sizeLimit integer 0 Ограничение размера загружаемых файлов
filesLimit integer 0 Ограничить количество одновременно выбранных файлов
httpMethod string post Метод HTTP, используемый при загрузке файлов
timeout integer Ограничение времени ожидания при загрузке
autostart boolean false Признак автоматической загрузки файла при его выборе
templateFile string * HTML-код, используемый для создания и отображения информации о файле.
onSelect function|string Событие возникающее при выборе файла
onRemove function|string Событие возникающее при удалении файла
onBeforeStart function|string Событие возникающее перед началом загрузки файла
onStart function|string Событие возникающее в начале загрузки файла
onProgress function|string Событие возникающее при изменении прогресса загрузки файла
onAbort function|string Событие возникающее при отмене загрузки файла
onSuccess function|string Событие возникающее при успешной загрузке файла
onError function|string Событие возникающее при ошибке связанной с файлом
onDragEnter function|string Событие возникающее при вхождении перетаскиваемого файла в зону загрузки
onDragOver function|string Событие возникающее при перетаскиваемого файла по зоне загрузки
onDragLeave function|string Событие возникающее при выходе перетаскиваемого файла из зоны загрузки
onDragEnd function|string Событие возникающее при завершении перетаскивания файла по зоне загрузки
iconDefault string bi bi-file-earmark-text Класс иконки для файла по умолчанию
mimeTypes object Список типов файлов и их расширений для определения подставляемой иконки. Существующие типы: archive, word, excel, video, audio, pdf, binary.
Пример: pdf: { mime: ['application/pdf'], ext: ['pdf'], icon: 'bi bi-file-earmark-pdf' }

Значение по умолчанию для опции "templateFile"


    <div class="fileup-file [TYPE] mb-2 p-1 d-flex flex-nowrap gap-2 bg-light border border-secondary-subtle rounded rounded-1">
        <div class="fileup-preview">
            <img src="[PREVIEW_SRC]" alt="[NAME]" class="border rounded"/>
            <i class="fileup-icon fs-4 text-secondary"></i>
        </div>
        <div class="flex-fill">
            <div class="fileup-description">
                <span class="fileup-name">[NAME]</span>
                <small class="fileup-size text-nowrap text-secondary">([SIZE])</small>
            </div>

            <div class="fileup-controls mt-1 d-flex gap-2">
                <span class="fileup-remove" title="[REMOVE]">✕</span>
                <span class="fileup-upload link-primary">[UPLOAD]</span>
                <span class="fileup-abort link-primary" style="display:none">[ABORT]</span>
            </div>

            <div class="fileup-result"></div>

            <div class="fileup-progress progress mt-2 mb-1">
                <div class="fileup-progress-bar progress-bar"></div>
            </div>
        </div>
    </div>
                            

Methods

Method Return Description
let instance = fileUp.create( options ) object Метод для создания экземпляра
let instance = fileUp.get( id ) object Получение ранее созданного экземпляра
instance.getOptions() object Получение параметров
instance.getId() string Получение id
instance.getInput() jQuery|null Получение input
instance.getQueue() jQuery|null Получение queue
instance.getDropzone() jQuery|null Получение dropzone
instance.on(eventName, callback, context) Подписка на событие
instance.one(eventName, callback, context) Подписка на событие таким образом, что выполнение произойдет лишь один раз
instance.getLang() object Получение настроек языка
instance.getFiles() object Получение всех файлов
instance.getFileById( fileId ) object|null Получение файла по его id
instance.removeAll() Удаление всех файлов
instance.uploadAll() Загрузка всех файлов
instance.abortAll() Отмена загрузки всех файлов

Events

Event name Params Description
select file Событие возникающее при выборе файла
remove file Событие возникающее при удалении файла
load_before_start file, xhr Событие возникающее перед началом загрузки файла
load_start file Событие возникающее в начале загрузки файла
load_progress file, ProgressEvent Событие возникающее при изменении прогресса загрузки файла
load_abort file Событие возникающее при отмене загрузки файла
load_success file, response Событие возникающее при успешной загрузке файла
error errorType, options Событие возникающее при ошибке связанной с файлом
load_finish file Событие возникающее при завершении запроса, при успешном или нет
drag_enter event Событие возникающее при вхождении перетаскиваемого файла в зону загрузки
drag_over event Событие возникающее при перетаскиваемого файла по зоне загрузки
drag_leave event Событие возникающее при выходе перетаскиваемого файла из зоны загрузки
drag_end event Событие возникающее при завершении перетаскивания файла по зоне загрузки

Sass variables


    $fileup-color-success: #4CAE4C;
    $fileup-color-error:   #CE0000;
    $fileup-file-width:    350px;

    $fileup-dropzone-bg-color:     #f6f6ff;
    $fileup-dropzone-border-color: #0018ff;
    $fileup-dropzone-border-style: dashed;
    $fileup-dropzone-border-width: 1px;