【问题标题】:HTML5 FileReader API crashes chrome 17 when reading large file as slice将大文件作为切片读取时,HTML5 FileReader API 崩溃 chrome 17
【发布时间】:2012-02-13 17:36:08
【问题描述】:

我正在尝试将大文件 (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 和 18dev 版本中,读取 1GB 数据后浏览器崩溃。

这是 Chrome 17 中的已知问题吗?

【问题讨论】:

  • 如果您遇到可重现的崩溃,请在new.crbug.com 提交错误并在此处发布 ID。我会确保它出现在团队面前。
  • 问题已提交:问题 #114179:HTML5 FileReader API 在将大文件读取为切片时崩溃 chrome 17
  • 这很有趣......我有几乎完全相同的代码,这个问题也发生在我身上。你能在这方面取得任何进展吗?

标签: html google-chrome filereader


【解决方案1】:

我在读取 1.8 GB 文件时遇到了同样的问题。如果我看任务管理器,chrome.exe 会占用 1.5 GB 的内存然后崩溃。我的解决方案是使用 Javascript 工作者,然后使用 FileReaderSync 而不是 FileReader。 javascript worker 在单独的线程中运行,而 FileReaderSync 只能在 javascript worker 中运行。

【讨论】:

    【解决方案2】:

    您需要更改应该根据文件大小更改块大小运行时间的算法。循环连续运行时谷歌浏览器崩溃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多