我使用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)
哪里可能有问题? 非常感谢你
答案 0 :(得分:2)
progress event spec提到progress事件也可以具有布尔值.lengthComputable
属性。如果某个进度事件的该属性为false,我希望event.loaded
和event.total
的值不会反映上传的进度。
规范说.lengthComputable
将为true,如果设置了XMLHttpRequest的.total
标头,Content-Length
将反映文件的长度。结果是XMLHttpRequest will not allow setting Content-Length
- 在该锚点下方搜索Content-Length
。据推测,他们这样做是因为脚本可能会错误地计算它发送的数据的长度,而用户代理则不太可能这样做。
查看您的服务器正在接收的请求。他们有Content-Length
标题吗?