我正在尝试将大文件(3GB)读取为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&amp; 18dev版本,在阅读1GB数据浏览器崩溃后。
Chrome 17中是否存在已知问题?
答案 0 :(得分:2)
我在1.8 GB文件中读取时遇到同样的问题。如果我看任务管理器,chrome.exe将占用高达1.5 GB的内存,然后崩溃。我的解决方案是使用Javascript工作器,然后使用FileReaderSync而不是FileReader。 javascript worker在一个单独的线程中运行,而FileReaderSync只能在javascript worker中运行。
答案 1 :(得分:0)
您需要更改应根据文件大小更改块大小运行时间的算法。当循环连续运行时,谷歌浏览器会崩溃。