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 :)