FileReader无法读取大blob

时间:2016-10-14 13:24:15

标签: javascript memory blob filereader

我遇到了FileReader的问题并且读取了相当大的Blob。

const size = 50; //MB
const blob = new Blob([new ArrayBuffer(size*1024*1024)], {type: 'application/octet-string'});

console.log(blob.size);

const reader = new FileReader();
reader.onload = function(e) {
    console.log(new Uint8Array(e.target.result));
};
reader.readAsArrayBuffer(blob.slice(0, 1024));

https://jsfiddle.net/aas8gmo2/

上面的示例显示每次都不调用 onload 函数(如果是,则将Blob的大小增加到100/200/300 MB)。该问题仅在Chrome(在53.0.2785.143下测试)

下可重现

任何提示可能出错?

1 个答案:

答案 0 :(得分:1)

上次我使用Chrome时,单个blob大小的硬帽约为500mb。

另外,给定以下线程:https://bugs.chromium.org/p/chromium/issues/detail?id=375297https://github.com/streamproc/MediaStreamRecorder/issues/86

创建多个小blob时,内存似乎未正确清除,您可能需要重新加载页面才能继续。 (这也可以解释为什么JSFiddle可能需要多次尝试)。

所以现在,欺骗性的答案,但似乎你必须找到一个解决方法......或深入了解Chrome的源代码。