我正在尝试实施上传表单并返回上传状态以使用xhr返回用户。一切似乎都得到了正确的实现,但是在上传时,回调似乎发生得太快,返回的百分比远高于实际发生的百分比。
对于文件〜< 20Mb,我立即收到回调,显示超过99%,同时上传继续在后台流失一段时间。
请参阅以下screengrab,显示74Mb文件中的控制台。这是在上传初始化后的几秒钟,上传持续了大约60秒(注意只有3个回调注册(加载totalsize)(计算的百分比)和ajax上传继续与throbber)。
有没有人遇到这种情况并设法获得上传状态的精确表示?
('load'事件在上传过程后正确触发)
这是我的代码:
$(this).ajaxSubmit({
target: '#output',
beforeSubmit: showRequest,
xhr: function()
{
myXhr = $.ajaxSettings.xhr();
if (myXhr.upload)
{
console.log('have xhr');
myXhr.upload.addEventListener('progress', function(ev){
if (ev.lengthComputable) {
console.log(ev.loaded + " " + ev.total);
console.log((ev.loaded / ev.total) * 100 + "%");
}
}, false);
}
return myXhr;
},
dataType: 'json',
success: afterSuccess
});
答案 0 :(得分:7)
有几个相同行为的报告 - 文件上传的错误进度报告 - 由防病毒软件检查要上载的文件引起。我的猜测是,防病毒的某些部分试图弥补可能的延迟(由检查引起) - 并且无法正确执行。
答案 1 :(得分:1)
我最近遇到了同样的问题。我认为您的ajax调用只是在文件上传之前返回。要解决此问题,请加载您上传的内容并检查load
事件。例如,如果您要上传图像(使用jQuery):
var loadCheck = $('<img src="' + uploadedUrl +'">').hide().appendTo('body');
loadCheck.on('load', updateProgressBar());
当然,您可以在其他类型文件上实现它,并合并$ .each迭代。