Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XHR上载进度事件总数与目标文件大小不同?_Javascript_Jquery_Xmlhttprequest_Jqxhr - Fatal编程技术网

Javascript XHR上载进度事件总数与目标文件大小不同?

Javascript XHR上载进度事件总数与目标文件大小不同?,javascript,jquery,xmlhttprequest,jqxhr,Javascript,Jquery,Xmlhttprequest,Jqxhr,我目前正在开发一个文件上传程序,它最终能够循环多个文件,并通过预先循环所有文件来计算要上传的总字节数。然而,我遇到了以下问题 如果将文件输入中的target.files[n].size返回的文件大小与XHR的upload progress listener事件e.total返回的值进行比较,它们似乎不相同。XHR的e.total有时会高出几百字节 有人能解释为什么会这样吗?无论我使用什么浏览器来测试Javascript,这种情况都会发生 函数上传文件(){ var files=$('inpu

我目前正在开发一个文件上传程序,它最终能够循环多个文件,并通过预先循环所有文件来计算要上传的总字节数。然而,我遇到了以下问题

如果将文件输入中的
target.files[n].size
返回的文件大小与XHR的upload progress listener事件
e.total
返回的值进行比较,它们似乎不相同。XHR的
e.total
有时会高出几百字节

有人能解释为什么会这样吗?无论我使用什么浏览器来测试Javascript,这种情况都会发生


函数上传文件(){
var files=$('input[type=file]').prop('files');
var total_size=文件[0]。大小;
console.log(“size from file.size=“+total_size”);
var fd=新FormData();
fd.append('file',files[0]);
$.ajax({
url:“/ajax/uploadfiles.php”,
键入:“post”,
processData:false,
contentType:false,
数据:fd,
数据类型:“json”,
xhr:function(){
var xhr=new XMLHttpRequest();
xhr.upload.addEventListener('progress',函数(e){
console.log(“xhr size=“+e.total”);
},假);
返回xhr;
}
});//ajax
};

ProgressEvent的
total
属性统计所有正文字节,这对于文件上载通常意味着
多部分/表单数据
编码。(参见第4.5节第6.6步;XHR也适用。)


如果您自己进行编码,则可以提前计算正文字节总数,但我认为不可能通过
FormData
实例来确定。使用ProgressEvent的
total
值而不是文件
size

“当使用HTTP下载资源时,这只表示内容本身,而不是标题和其他开销。”因此,相反,上传会计算标题和开销。感谢您的快速回复。我有没有办法考虑到这些开销,这样我就可以得到多个文件的总体进度值,这些文件将分别上载…?不幸的是,我必须向您指出另一个开发人员,因为我从来没有处理过自己的进度处理。好的,我想我有一个解决方法,但是,如果有一种适当的方法来计算报头开销,那当然会更好。您没有将文档作为答案保留,因此我无法将其标记为已接受。@Taplar它不包含标题;差异来自于编码。看看我的答案。