我使用XMLHttpRequest进行文件上传,在浏览器中我有一个进度条,显示图像已经上传了多少部分。
xhr.upload.addEventListener('progress', onprogressHandler, false);
function onprogressHandler(event) {
resp.innerHTML = event.loaded +' and '+ event.total;
var percent = Math.round((event.loaded / event.total) * 100);
var calc_display = document.getElementById('calc');
calc_display.innerHTML = percent;
};
如果我选择要上传的图像并发送表单,那么我总是看到相同的event.loaded
和event.total
值。我认为event.total
的值是文件的大小
我是一个新手,所以我没有那么多的经验,但我怎么可能总是有相同的价值观?(通常约2,700.000 kB)
哪里可能有问题?
进度事件规范提到进度事件也可以有一个布尔值的.lengthComputable
属性。如果该属性在进度事件上为false,我希望event.loaded
和event.total
的值不反映上传的进度。
规范说,如果设置了XMLHttpRequest的Content-Length
头,.lengthComputable
将为真,.total
将反映文件的长度。事实证明,XMLHttpRequest将不允许设置Content-Length
——在该锚的下方搜索Content-Length
。据推测,他们这样做是因为脚本可能会错误地计算它正在发送的数据的长度,而用户代理则不太可能这样做。
查看服务器正在接收的请求。他们有Content-Length
标题吗?
如果您上传的视频/图像大小较小,则值可能相同。你可以通过上传大小超过70MB的视频来检查你的加载值和total值,它应该会给你total和loaded