2012-02-13 174 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工作程序中工作。