使用FileReader(web api)在浏览器中读取大文件

时间:2015-12-05 18:13:14

标签: javascript asp.net-web-api filereader

我试图读取所选文件的第一个字节。

但是当我选择一个大文件(> 100Mb)时,我收到一个错误:" NotReadableError"。

请参阅下面的代码。是"数组缓冲区"真的是一个缓冲区,或者它只是将整个内容加载到内存中,我必须使用file#slice



function readFile(file) {
  var reader = new FileReader();
  
  reader.onload = function() {
    var buffer = reader.result;
    var view = new Int8Array(buffer);
    try {
      view.forEach(function(v, index, array) {
        console.log(v);
        alert("ok - " + v);
        throw "BreakException";
      })
    } catch (e) {
      if (e!=="BreakException") throw e;
    }
  }
  
  reader.onerror = function() {
    alert("error");
    console.log(reader.error);
  }
  
  reader.readAsArrayBuffer(file);
}

var fileField = document.getElementById("file");

fileField.onchange = function(e) {
  var file = e.target.files[0];
  readFile(file);
}

<form>
  <input id="file" type="file"/>
</form>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:4)

ArrayBuffer实际上是一个缓冲区,一个内存缓冲区。这就是缓冲区的工作原理。您的代码尝试将整个文件加载到内存中。要访问文件的特定范围而不将整个文件加载到内存中,必须使用Blob.slice(文件实现Blob的所有方法)。