HTML5 FileReader readAsArrayBuffer() 메서드를 사용하여 파일을 메모리로 읽습니다. 스펙 (위 링크)에있어서, 상기 판독 처리 중에 블롭 데이터대로, 사용자 에이전트는 ArrayBuffer [TypedArrays]로 부분 블로 브 데이터 결과를 업데이트하는 작업을 대기한다FileReader의 ArrayBuffer에서 부분 데이터 추출
그러나, 내가 테스트 한 브라우저 (파이어 폭스, 크롬, 오페라)는읽기 완료 될 때까지 바이트를 포함하는 객체는 이벤트의 진행을 동반합니다. 결과 속성은 ArrayBuffer [TypedArrays] 객체와 같이 현재로드 된 바이트 수 ( 의 분수) [ProgressEvents]의 부분 Blob 데이터 을 반환합니다. 사용자 에이전트는이 읽기 메소드를 처리하는 동안 ArrayBuffer [TypedArrays] 중 하나 이상을 반환해야합니다. 마지막으로 반환 된 값은 읽기 완료입니다.
reader.result
속성은 지속적으로 업데이트 될 것 같지 않습니다. 예를 들어 ID가
fileInput
의 HTMLInputElement을하고
file
입력
var reader = new FileReader(), pos = 0;
reader.addEventListener("progress", function(event){
console.log(reader.result);
var content = new Uint8Array(reader.result, pos, event.loaded);
pos = event.loaded;
// do stuff with the content down here
});
document.getElementById("fileInput").addEventListener("change", function(event){
reader.readAsArrayBuffer(event.target.files[0]);
});
. 충분히 큰 파일을 선택하고 콜백 여기, 실행 (이 예는 크롬에서이다) 콘솔에 발생하는 경우 :
null
Uncaught TypeError: Type error
내가 배열보기 Uint8Array부터 청크를 읽을 수 있기 때문에 형식 오류가 발생 있다고 생각 ArrayBuffer가 null이기 (위해) 때문에, ArrayBuffer
이상하게도 파일이 크지 만 너무 크지 않은 경우 몇 가지 진행률 이벤트가 실제로 성공적으로 실행됩니다.
"진행"이벤트에서 필요한 데이터를 제공하기 위해 어떻게 FileReader의 ArrayBuffer를 안정적으로 구현합니까?