simple mvc multiple example ejemplo bootstrap jquery file-upload blueimp

jquery - mvc - Carga de archivos programáticos con fragmentación: solo se envía el primer archivo



multiple file upload (5)

Al hacer una carga de archivo programático utilizando el plugin jQuery-File-Upload con fragmentación habilitada, no puedo enviar más de un archivo.

Estoy haciendo la llamada de la siguiente manera:

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

filesList es una lista de objetos File.

También he establecido maxChunkSize y establezco singleFileUploads en verdadero (también probé falso) como se indica en la página de la wiki de opciones .

¿Alguien ha tenido éxito al hacer que esto funcione?

Actualizar:

Hice un problema en GitHub por este problema y aquí está la respuesta del autor:

[...] Las cargas fragmentadas solo admiten un archivo por solicitud. Es decir, puede cargar simultáneamente múltiples archivos en fragmentos, pero tendrá que enviar solicitudes múltiples para eso.

Nuestra solución:

Como ya se ha comentado, y lo que terminamos haciendo, era enviar los archivos en un bucle donde el widget se inicializó con secuencialUploads establecido en true (lo querrás dependiendo de cómo esté configurado el servidor):

// 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] }); }


Básicamente los envías en un bucle.


Creo que el problema es de tu html. use algo como esto para el campo de archivo

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

El atributo de nombre debería array, entonces puedes obtenerlo desde el back-end


Deberías hacer así:

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


Si usa C # como back-end, puede probar esto (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"); } } });

y luego en usted UploadMethod haga algo como esto: (ServerSide, C #)

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''s 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 } }


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

Tal vez no sea precisamente el formato correcto, pero se entiende la idea :)