Как программно отправить / отправить несколько файлов с помощью jquery-file-upload

Для этого плагина довольно много вариантов (jquery-file-upload), и документы выглядят хорошо, но я все еще немного запутался. У меня есть форма, которая выглядит так:

<form id="fileupload" action="/file-upload" method="POST" enctype="multipart/form-data">
    <div class="form-buttons">
    <span id="add-files-wrap">
        <span>Add Files</span>
        <input id="add-files-btn" type="file" name="files[]" multiple>
    </span>
    <button id="upload-btn" type="button" onclick="uploadFiles()" class="btn-disabled">
        <span>Start Upload</span>
    </button>
    </div>
</form>

Когда файл или файлы добавляются, срабатывает обратный вызов add в инициализаторе загрузки файлов:

$('#fileupload').fileupload({
url: '/file-upload',
sequentialUploads: true,
add: function(e, data) {
    $.each(data.files, function(idx, file) {
            MY_FILES.push(file);
        }
    }
});

Затем, когда будет нажата кнопка загрузки в форме:

function uploadFiles() {
for (var i=0; i<MY_FILES.length; i++) {
        // Submit the file - how ???
    }
}

Я хотел бы отправлять / отправлять каждый файл по одному, используя отдельные запросы для каждого. Я знаю, что могу сделать fileupload('send', {files: MY_FILES}), но я бы хотел, чтобы обратный вызов запускался при каждом успешном ответе на запрос. Меня немного смущают все варианты обратного вызова в документации.

Изменить:
Ответил на свой вопрос.


person RTF    schedule 27.04.2014    source источник


Ответы (1)


Посмотрев еще немного документов, я сделал что-то вроде этого:

function uploadFiles() {
    uploadFile( FILES.pop() );
}

function uploadFile(file) {
    if (file == null) {
        console.log("Finished processing files.");
        return;
    }
    $('#fileupload').fileupload('send', {files: [file]})
    .success(function (result, textStatus, jqXHR) {
        console.log("Success...");
        uploadFile( FILES.pop() );
    })
    .error(function (jqXHR, textStatus, errorThrown) {
        console.log("Error...");
    })
    .complete(function (result, textStatus, jqXHR) {
        console.log("Complete...");
    });
}

Это прекрасно работает.

person RTF    schedule 27.04.2014