在客户端,我有一个文件拖放区(HTML5 File-API),用户可以将多个文件拖放到服务器上上传。为每个文件创建一个新的XMLHttpRequest对象,并异步地将文件发送到服务器。我通过xhr.upload对象上的progress事件监听器监视进度。
问题是,目前服务器端需要同步获取文件,因为必须按照文件顺序进行一些计算,而且不幸的是我无法更改该实现。但是,如果我将xhr对象设置为同步发送文件,则我注册的progress事件函数将不再触发,因此我无法监视进度。
有人能帮忙吗?(如果有使用jQuery的本机功能的解决方案,我也可以使用它。)
这是我当前正在使用的代码的重要部分:
问题是,目前服务器端需要同步获取文件,因为必须按照文件顺序进行一些计算,而且不幸的是我无法更改该实现。但是,如果我将xhr对象设置为同步发送文件,则我注册的progress事件函数将不再触发,因此我无法监视进度。
有人能帮忙吗?(如果有使用jQuery的本机功能的解决方案,我也可以使用它。)
这是我当前正在使用的代码的重要部分:
for (var i = 0; i < files.length; i++) {
var file = files[i];
var xhr;
if (window.XMLHttpRequest)
xhr=new XMLHttpRequest();
else
xhr=new ActiveXObject("Microsoft.XMLHTTP");
xhr.upload.addEventListener('progress',function(ev){
var percent = Math.round((ev.loaded/ev.total) * 100);
console.log(i + " : " + percent + "%");
progress.style.width = percent +'%';
if(progressHtml)
progressHtml.innerHTML = i + "/" + files.length + " : " + percent + "%";
}, false);
xhr.open("post", "/servlet/de.test.UploadDropServ", false); //synchronous
xhr.setRequestHeader("Filename", file.name);
xhr.setRequestHeader("UniFilename", file.name);
xhr.send(file);
xhr.addEventListener("load", function () {
progress.style.width = "100%";
}, false);
}
}