首页 > 解决方案 > 关于 FileReader.readAsArrayBuffer() 的问题

问题描述

如果我有一个大文件(例如数百 MB),FileReader.readAsArrayBuffer() 是否会将整个文件数据读取到 ArrayBuffer 中?
根据[这里[(https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsArrayBuffer)这就是发生的事情。

我有一个包含多个 GB 的大 .zip 文件。
我担心在移动设备上工作时会占用整个 RAM。
是否有另一种方法可以返回文件句柄并根据需要读取文件的一部分?

标签: javascriptfileapi

解决方案


您可以Blob.stream()为此使用:

const bigBlob = new Blob(["somedata".repeat(10e5)]);
console.log("Will read a %sbytes Blob", bigBlob.size)
const reader = bigBlob.stream().getReader();
let chunks = 0;
reader.read().then(function processChunk({ done, value }) {
  if (done) {
    console.log("Stream complete. Read in %s chunks", chunks);
    return;
  }
  // do whatever with the chunk
  // 'value' is an ArrayBuffer here
  chunks++;
  return reader.read().then(processChunk);
}).catch(console.error);


推荐阅读