如何从FileReader上传大型Javascript文件

时间:2015-09-29 11:10:21

标签: javascript html5 xmlhttprequest filereader

我制作了一个使用PDF.js显示PDF文件的网络应用程序(使用HTML5 FileReader从本地磁盘打开):

var fileReader;
fileInput.addEventListener("change", function(e){
  var files = e.target.files;
  if (!files || files.length === 0) return;
  var file = files[0];

  // Read the local file into a Uint8Array.
  fileReader = new FileReader();
  fileReader.onload = function(e){
    var uint8Array = new Uint8Array(e.target.result);

    // Use uint8Array to open PDF in PDF.js
  };
  fileReader.readAsArrayBuffer(file);
});

根据用户的要求,我想将加载的文件传输到服务器以修改PDF:

var xhr = new XMLHttpRequest();
xhr.open("POST", "/uploadPdf");

xhr.onreadystatechange = function(){
  if (xhr.readyState === 4){
    if (xhr.status === 200){
      console.log(xhr.responseText);
    }
    else {
      console.log(xhr);
    }
  }
};
xhr.send(fileReader.result);

这很好用,直到我尝试使用大型PDF(Chrome中为65 MB) - 浏览器在上传文件时冻结约30秒。

对替代方法的任何建议都不会冻结浏览器,也不要求用户再次选择文件,最好是使用进度函数?

0 个答案:

没有答案