我正在使用FileReader API读取多个文件并分解成部分

问题描述:

我想加载多个大型大文件。要做到这一点,我从我正在使用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); 

我不知道python,但没有一个流处理大文件上传的解决方案? 也许这样:Python: HTTP Post a large file with streaming

在这种情况下,分割孔文件分割成块,使多个范围请求得到毫无意义

+0

希望我写这些东西之前穿过这个来的。无论如何,我会放弃它,让你知道我如何继续 – Keir