我遇到了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下测试)
下可重现任何提示可能出错?
答案 0 :(得分:1)
上次我使用Chrome时,单个blob大小的硬帽约为500mb。
另外,给定以下线程:https://bugs.chromium.org/p/chromium/issues/detail?id=375297和https://github.com/streamproc/MediaStreamRecorder/issues/86
创建多个小blob时,内存似乎未正确清除,您可能需要重新加载页面才能继续。 (这也可以解释为什么JSFiddle可能需要多次尝试)。
所以现在,欺骗性的答案,但似乎你必须找到一个解决方法......或深入了解Chrome的源代码。