当前位置:  开发笔记 > 编程语言 > 正文

使用FileReader(Web API)在浏览器中读取大文件

如何解决《使用FileReader(WebAPI)在浏览器中读取大文件》经验,为你挑选了1个好方法。

我正在尝试读取所选文件的第一个字节。

但是,当我选择一个大文件(> 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);
}

Tamas Hegedu.. 5

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



1> Tamas Hegedu..:

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

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有