Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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 如何防止上传切片文件时跳过进度条?_Javascript_Upload_Progress Bar_Blob - Fatal编程技术网

Javascript 如何防止上传切片文件时跳过进度条?

Javascript 如何防止上传切片文件时跳过进度条?,javascript,upload,progress-bar,blob,Javascript,Upload,Progress Bar,Blob,我使用的是XMLHttpRequest();在循环中上载切片文件 function upload(blobOrFile, part, name, size) { var formdata = new FormData(); var xhr = new XMLHttpRequest(); ... var parallel_uploads=0; } 在该函数中,我使用以下代码显示进度条: xhr.onreadystatechange = funct

我使用的是XMLHttpRequest();在循环中上载切片文件

function upload(blobOrFile, part, name, size) {
      var formdata = new FormData();
      var xhr = new XMLHttpRequest();
      ...
      var parallel_uploads=0;
 }
在该函数中,我使用以下代码显示进度条:

xhr.onreadystatechange = function () {
      if (xhr.readyState == 4) { 
          parallel_uploads = parallel_uploads + 1;                                                                        
      }
}
xhr.upload.addEventListener("progress", function (evt) {
      if (evt.lengthComputable) {
          var total_parts = Math.ceil(size / 209715);
          var cur_part = (evt.loaded / evt.total) / total_parts;
          var percentComplete = cur_part + parallel_uploads / total_parts;
          $('#bars progress').val(percentComplete);
      }
}, false);
有关xhr状态的更多信息

进度条正在跳过,尤其是在上载小文件时。在Chrome中,它向前和向后的跳跃比在Firefox中更明显。我认为问题在于并行上传的检测出了问题。我尝试了所有xhr状态,但没有任何效果


那么,如何从所有blob中获得正确的上传字节数呢

我使用了以下方法,这样上传小文件时不会跳过太多内容:

if(total_parts>20){
   //the code from above
}
else{                                                                            
   percentComplete = parallel_uploads / total_parts;
}