사용자가 선택한 파일을 읽고 base64로 변환하는 응용 프로그램을 작성 중입니다. 모든 파일이 메모리에서 읽힐 때 알림을 받고 싶습니다. 이 목적을 위해 이벤트를 FileReader
으로 처리하고 완전한 알림을 보내는 곳에서 Observable
을 사용하고 있습니다. 병렬로 작업을 실행하려면 forkJoin
을 사용하고 있습니다.observables와 병렬로 파일 읽기
Observable
을 만들고 구독하는 코드는 아래를 참조하십시오.
onChange($event: any) {
console.log('No of files selected: ' + $event.target.files.length);
var observableBatch : any = [];
var rawFiles = $event.target.files;
for (var i = rawFiles.length - 1; i >= 0; i--) {
var reader = new FileReader();
var file = rawFiles[i];
var myobservable = Observable.create((observer: any) => {
reader.onload = function (e: any) {
var data = e.target;
var imageSrc = data.result;
console.log('File loaded succesfully.');
observer.next("File loaded");
observer.complete();
};
});
observableBatch.push(myobservable);
reader.readAsArrayBuffer(file);
}
Observable.forkJoin(observableBatch)
.subscribe(
(m) => {
console.log(m);
},
(e) => {
console.log(e);
},
() => {
console.log("All file(s) loading completed!!!");
}
);
}
전체 샘플 코드는 내가 하나의 파일을 선택하면, onload
기능이 실행됩니다 plunkr
에서 사용할 수 있습니다 내가 선택했을 때 나는 다음과 같은 콘솔 로그
그러나를 얻을 수 복수 파일 onload
이 한 번만 실행되고 일괄 작업이 완료되지 않습니다. 내가 실수를하고 어디
누군가가 나를 이해하는 데 도움이 될 수 있습니다 다음과 같은 콘솔 로그를 참조하십시오?
나를 위해 작동하지 않습니다! –
FileReader가 인스턴스화 할 인수를 취하지 않으므로 새 FileReader (file)가 올바르지 않습니다. –