실제로 파일은 Blob이며 BLOB에는 슬라이스 메서드가 있습니다.이 메서드를 사용하여 작은 파일의 큰 파일을 잡을 수 있습니다.
나는 지난 주 큰 로그 파일을 필터링하기 위해 snip을 작성했지만 큰 파일을 통해 sub-section-by-section을 반복 할 때 사용할 수있는 패턴을 보여줍니다.
- 파일 fnLineFilter 파일의 하나 개의 라인을 수용하고
- fnComplete 수집 된 라인 어레이로 전달되는 콜백이다 그것을 유지 true를 반환하는 함수이다
- 파일 오브젝트를이다
당신은 라인 findi 제거 할 수 분명히
function fileFilter(file, fnLineFilter, fnComplete) {
var bPos = 0,
mx = file.size,
BUFF_SIZE = 262144,
i = 0,
collection = [],
lineCount = 0;
var d1 = +new Date;
var remainder = "";
function grabNextChunk() {
var myBlob = file.slice(BUFF_SIZE * i, (BUFF_SIZE * i) + BUFF_SIZE, file.type);
i++;
var fr = new FileReader();
fr.onload = function(e) {
//run line filter:
var str = remainder + e.target.result,
o = str,
r = str.split(/\r?\n/);
remainder = r.slice(-1)[0];
r.pop();
lineCount += r.length;
var rez = r.map(fnLineFilter).filter(Boolean);
if (rez.length) {
[].push.apply(collection, rez);
} /* end if */
if ((BUFF_SIZE * i) > mx) {
fnComplete(collection);
console.log("filtered " + file.name + " in " + (+new Date() - d1) + "ms ");
} /* end if((BUFF_SIZE * i) > mx) */
else {
setTimeout(grabNextChunk, 0);
}
};
fr.readAsText(myBlob, myBlob.type);
} /* end grabNextChunk() */
grabNextChunk();
} /* end fileFilter() */
: 여기
내가 사용하는 코드입니다 아니, 그냥 대신 순수한 범위를 잡아라. 어떤 유형의 데이터를 파헤쳐야하는지 잘 모르겠다. 중요한 것은 슬라이스 매커니즘이다. 위의 텍스트 중심 코드에서 잘 설명되어있다.
챔피언처럼 작동합니다. 감사!! – Krum