Подтвердить что ты не робот

Загрузка программного файла с помощью chunking: отправляется только первый файл

При выполнении загрузки программных файлов с помощью jQuery-File -Upload plugin с включенным chunking Я не могу получить больше одного файла для отправки.

Я делаю вызов следующим образом:

fileUploadWidget.fileupload('send',
{
    files: filesList
})

filesList - это список объектов File.

Также я установил maxChunkSize и установил singleFileUploads в true (я также попробовал false), как указано на странице wiki.

Кто-нибудь имел успех, чтобы это работало?

Update:

Я сделал issue в GitHub для этой проблемы, и здесь ответ автора:

[...] Загруженные в очередь загрузки поддерживают только один файл для каждого запроса. То есть вы все равно можете одновременно загружать несколько файлов в куски, но вам придется отправлять mutliple запросы для этого.


Наше решение:

Как уже отмечалось, и что мы закончили делать, было отправить файлы в цикле, где widget был инициализирован sequentialUploads установлен на true (вам нужно это в зависимости от настройки вашего бэкэнд):

// for illustration only
// does not do anything with the returned jqXHR objects
for (i = 0; i < files.length; i++) {
    widget.fileupload('send', { files: files[i] });
}
4b9b3361

Ответ 1

Если вы используете С# в качестве исходного кода, вы можете попробовать это (Client-Side, JQuery):

 $("#btnUpload").click(function () { // btnUpload is the ID of any button for upload
            var formdata = new FormData(); //FormData object
            var fileInput = document.getElementById('fileInput');
            //Iterating through each files selected in fileInput
            for (i = 0; i < fileInput.files.length; i++) {
                //Appending each file to FormData object
                formdata.append(fileInput.files[i].name, fileInput.files[i]);
            }
            //Creating an XMLHttpRequest and sending
            var xhr = new XMLHttpRequest();
            xhr.open('POST', '/UploadMethod'); // UploadMethod is your back-end code
            xhr.send(formdata);
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    // alert("uploaded");
                    }
            }

        });

а затем в вашем UploadMethod выполните примерно следующее: (ServerSide, С#)

public void Upload()
        {
            for (int i = 0; i < Request.Files.Count; i++)
            {
                HttpPostedFileBase file = Request.Files[i]; //Uploaded file
                //Use the following properties to get file name, size and MIMEType
                int fileSize = file.ContentLength;
                string fileName = file.FileName;
                string mimeType = file.ContentType;
                System.IO.Stream fileContent = file.InputStream;
                //To save file, use SaveAs method
                var appPath = HostingEnvironment.ApplicationPhysicalPath + "Documents/" + "_" +  DateTime.Now+ fileName;

                file.SaveAs(appPath); //File will be saved in Documents folder
              }
        }

Ответ 2

foreach(files in filesList.length)
{
    fileUploadWidget.fileupload('send',
    {
        files:filesList
    }
}

Возможно, не точно правильное форматирование, но вы получаете идею:)

Ответ 3

Вам нужно сделать следующее:

$('collection object').each(function () {
$(this).fileupload({'send',
    files: $(this)
});
});

Ответ 4

Вы в основном отправляете их в цикле.

Ответ 5

Я думаю, проблема связана с вашим html. используйте что-то вроде этого для поля файла

<input type='file' name="pics[]" />

Атрибут name должен массировать, тогда вы можете получить цикл из бэкэнд