Estoy cargando varios archivos a través de XmlHTTPRequest y HTML5. Tengo la carga funcionando bien, pero me gustaría tener una barra de progreso para cada carga de archivo. El código que tengo, sin embargo, usa la última barra de progreso para TODAS las cargas de archivos en lugar de cada carga usando su propia barra de progreso. Así que esto es principalmente visual en el lado del cliente, pero realmente me molesta. Por alguna razón, asumo que el evento que vincula el progreso de la carga del archivo se sobrescribe a sí mismo y utiliza la última barra de progreso. Aquí está mi código:Carga de archivos HTML5 con barras de progreso múltiples
var files = event.dataTransfer.files;
// iterate over each file to upload, send a request, and attach progress event
for (var i = 0, file; file = files[i]; i++) {
var li = $("<li>" + file.name + "<div class='progressbar'></div></li>");
// add the LI to the list of uploading files
$("#uploads").append(li);
// fade in the LI instead of just showing it
li.hide().fadeIn();
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', function(e) {
var percent = parseInt(e.loaded/e.total * 100);
li.find(".progressbar").width(percent);
}, false);
// check when the upload is finished
xhr.onreadystatechange = stateChange;
// setup and send the file
xhr.open('POST', '/attachments', true);
xhr.setRequestHeader('X-FILE-NAME', file.name);
xhr.send(file);
}
Estoy asumiendo que el "Li" adecuado no está siendo leído correctamente por el evento "progreso". Sospecho que tengo que hacer algún tipo de encuadernación para decir al evento de "progreso" que use una variable en particular, ya que es "li", pero no estoy seguro de lo que me estoy perdiendo.
¡Fantástico, gracias! Intenté originalmente agregar todos los archivos a una cola en una matriz, pero eso no funcionaría. Sin embargo, hacer referencia a los archivos de la entrada del archivo funciona muy bien: D Me ayudó a crear esto: http://userscripts.org/scripts/show/158420 – Pluto
Como muestra este ejemplo, si desea tener barras de progreso separadas para cada archivo, debe tener un XHR separado para cada archivo en lugar de tener un XHR con todos los archivos adjuntos. Esperaba que el evento de progreso tuviera metadatos que indicaran en qué archivo estaba proporcionando estadísticas el evento. –
Para mí no funcionó xhr.addEventListener ("progreso", función (e) {}), tuve que usar xhr.upload.onprogress = function (e) {} – maylon