将大文件作为切片读取时,HTML5 FileReader API会崩溃chrome 17 [英] HTML5 FileReader API crashes chrome 17 when reading large file as slice
问题描述
我正在尝试将大文件(3GB)读为100Mb。
I'm trying to read large file (3GB) as slice as 100Mb.
***function sliceMe() {
var file = document.getElementById('files').files[0],
fr = new FileReader;
var chunkSize = document.getElementById('txtSize').value;
chunkSize =1048576;
var chunks = Math.ceil(file.size / chunkSize);
var chunk = 0;
document.getElementById('byte_range').innerHTML = "";
function loadNext() {
var start, end,
blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice;
start = chunk * chunkSize;
if (start > file.size)
start = end+1;
end = start + (chunkSize -1) >= file.size ? file.size : start + (chunkSize -1);
fr.onload = function(e) {
if (++chunk <= chunks) {
document.getElementById('byte_range').innerHTML += chunk + " " +
['Read bytes: ', start , ' - ', end,
' of ', file.size, ' byte file'].join('')+"<br>";
//console.info(chunk);
loadNext(); // shortcut here
}
};
fr.readAsArrayBuffer(blobSlice.call(file, start, end));
}
loadNext();
}***
以上代码在Firefox和Chrome 16中按预期工作。但是,在Chrome 17& 18dev版本,在阅读1GB数据浏览器崩溃后。
Above code works as expected in Firefox and in Chrome 16. But in Chrome 17 & 18dev version, after reading 1GB data browser crashes.
在Chrome 17中是否已知问题?
Is it known issue in Chrome 17?
推荐答案
我在阅读1.8 GB文件时遇到了同样的问题。如果我看任务管理器,chrome.exe会占用1.5 GB的内存然后崩溃。我的解决方案是使用Javascript工作,然后使用FileReaderSync而不是FileReader。 JavaScript工作者在一个单独的线程中运行,而FileReaderSync只能在JavaScript工作器中工作。
I had the same problem reading in a 1.8 GB file. If I watch task manager, chrome.exe would take up to 1.5 GB of memory and then crash. My solution was to use a Javascript worker and then use FileReaderSync instead of FileReader. The javascript worker runs in a separate thread, and FileReaderSync will only work in a javascript worker.
这篇关于将大文件作为切片读取时,HTML5 FileReader API会崩溃chrome 17的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!