2012-02-13 175 views
3

我试图读取大文件(3GB)作为100Mb的片。当阅读大文件时,HTML5 FileReader API崩溃了chrome 17

 ***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中是否已知问题?

+0

如果您有可重现的崩溃,请在http://new.crbug.com/上提交错误并在此处张贴ID。我会确保它在团队面前。 – 2012-02-14 08:52:37

+0

问题已提交:问题#114179:\t HTML5 FileReader API在将大文件作为扇区片段 – Joe 2012-02-14 14:45:58

+0

后续处理时,崩溃了Chrome 17。谢谢! – 2012-02-14 15:22:34

回答

0

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

2

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