2016-09-14 4 views
0

여러 개의 큰 대형 파일을로드하려고합니다. 이렇게 나는 FileReader API를 사용하여 여러 파일을 읽고 부품을 나누는 중

javascript FileReader - parsing long file in chunks

각 덩어리도 기대할 덩어리의 총 수를 줄 부품 번호를 부여하고, 파이썬 CGI 프로그램에 전달됩니다

의 코드를 끼. 파이썬 CGI는 전체 파일 집합이 원하는 파일로 수신 될 때 청크를 연결합니다. 이것은 작동합니다.

이제 각 파일을 이전과 같이 청크로 나누어서 여러 파일을로드하려고합니다. 각 파일에는 ID 번호가 있으므로 파이썬은 그것을 다른 디렉토리에 저장한다는 것을 알게되지만 메모리가 부족하여 충돌합니다. Reading multiple files with Javascript FileReader API one at a time

에서 한 번에 하나 개의 파일을 처리하기 위해 순차적으로 오히려 비동기하지만 내 시도보다는 내 현재 코드 작업이 코드가 실패되었습니다 얻기 위해 자바 스크립트를 설득하는 방법을 제안 있습니다.

파일 분할 코드는 다음과 같습니다. 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: HTTP Post a large file with streaming? 여러 범위의 요청을 덩어리에 구멍 파일을 분할하고 만드는 경우에

내가이 모든 물건을 쓰기 전에이 건너 것 무의미

+0

소원을 가져옵니다. 어쨌든 나는 그것을 줄 것이며 내가 어떻게 시작하는지 알려 줄 것이다. – Keir

관련 문제