2016-09-14 52 views
0

我想加載多個大型大文件。要做到這一點,我從我正在使用FileReader API讀取多個文件並分解成部分

javascript FileReader - parsing long file in chunks

每塊都有一個編號,並傳遞給一個Python CGI程序也給塊期待總數捏了一把代碼。當全套塊被接收到所需文件時,Python CGI將塊連接起來。 這有效。

現在我想加載多個文件,每個文件都像以前一樣分成塊。每個文件都有一個ID號碼,所以Python會知道將它存儲在不同的目錄中,但是我的內存不足並且崩潰。 在

Reading multiple files with Javascript FileReader API one at a time

有建議如何說服Javascript功能來處理一個文件在一個時間順序而不是異步執行,但我試圖得到這個代碼我目前的代碼工作都沒有成功。

文件拆分代碼如下。變量numparts終止遞歸調用。

任何人都可以建議如何修改循環底部的代碼以便按順序執行setupReader。

function setupReader(file,filename) { 
    var fileSize = (file.size - 1); 
    var chunkSize = 150000000; 
    var offset  = 0; 
    var numparts= Math.ceil(fileSize/chunkSize); 
    var chunkReaderBlock = null; 
    var partno=0; 
    var readEventHandler = function(evt) { 
     if (evt.target.error == null) { 
      offset += chunkSize; 
      callback(evt.target.result); // callback for handling read chunk 
     } else { 
      console.log("Read error: " + evt.target.error); 
      alert("File could not be read"); 
      return; 
     } 
     if (partno >= numparts) { 
      console.log("Done reading file"); 
      return; 
     } 
     chunkReaderBlock(offset, chunkSize, file); 
    } 

    callback=function(result) { 
     partno+=1; 
     var bfile = result; 
     var query="?fileName="+filename+"&Part="+partno+"&of="+numparts+"&bfile="+bfile; 
     loadDoc('partition0',query,0); 
    } 

    chunkReaderBlock = function(_offset, length, _file) { 
     var r = new FileReader(); 
     var blob = _file.slice(_offset, length + _offset); 
     r.onload = readEventHandler; 
     r.readAsDataURL(blob); 
    } 
    chunkReaderBlock(offset, chunkSize, file); 
} 

for (var i = 0; i < numfiles; i++) { 
    setupReader(fileList[i],fileList[i].name); 

回答

0

我不知道python,但沒有一個流處理大文件上傳的解決方案? 也許這樣:Python: HTTP Post a large file with streaming

在這種情況下,分割孔文件分割成塊,使多個範圍請求得到毫無意義

+0

希望我寫這些東西之前穿過這個來的。無論如何,我會放棄它,讓你知道我如何繼續 – Keir

相關問題