voy asumir que si estas subiendo archivos por ajax entonces estás usando XMLHttpRequest2
o estás usando algún navegador (chrome, firefox) que permite el envio por XMLHttpRequest (level 1). (nota de redacción: en realidad XMLHttpRequest 1 no admite envio de archivo. en realidad el estándar entró nuevamente a la etapa WorkingDraft y se publica bajo el mismo nombre.) según lo que pude ver, no hace falta reunir todos los datos. no al menos si envias varios archivos bajo el mismo objeto XMLHttpRequest. si tienes varios objetos XHR, ahí si tendrías que reunir todos los datos para calcular el overall de datos subidos. en chrome y firefox me funciona este simple ejemplo:
Código:
var http = new XMLHttpRequest();
http.open('post', url);
http.upload.addEventListener('progress', function(event){
console.log(event.loaded / event.totalSize * 100 + ' %');
}, false);
http.send(new FormData(document.forms[0]));
en este ejemplo estoy usando como base un formulario que tiene varios campos INPUT FILE. en el evento,
totalSize representa la suma en bytes de todos los archivos a enviar, aunque no se si también incluye los datos de los demás campos (INPUT TEXT, TEXTAREA, SELECT, etc).