Я пытаюсь прочитать папку с помощью ввода и сохранить содержимое каждого отдельного файла, содержащегося в папке, в массиве.
Все это делается с помощью этого ввода:
<div class="form-group">
<input type="file" id="file" (change)="accessFiles($event)" webkitdirectory directory multiple >
</div>
И этот FileReader:
files = []
readFolder(fileChangeEvent: Event) {
this.readFile(0, (fileChangeEvent.target as HTMLInputElement).files);
}
private readFile(index, files) {
const reader = new FileReader();
if (index >= files.length ) {
console.log(this.files);
return;
}
const file = files[index];
reader.onload = (e: any) => {
const bin = e.target.result;
this.files.push(e.target.result);
this.readFile(index + 1, files);
};
reader.readAsBinaryString(file);
}
Теперь, console.log
в readFile
отображает массив, и он выглядит хорошо, теперь единственное, что я хочу использовать его позже в коде, для этого я пытаюсь вернуть его.Я пробовал что-то вроде этого:
accessFiles(data){
const contentList = this.readDocument(data));
}
, который не работал.результат оказался undefined
То, что я также пытался подписаться на данные:
accessFiles(data){
this.readFolder(data).subscribe(values => {
}
}
, но потом я получил эту ошибку:
Свойство «подписка» не существует для типа «void».
Именно поэтому я попытался реализовать Observable:
files = []
readFolder(fileChangeEvent: Event) {
return this.readFile(0, (fileChangeEvent.target as HTMLInputElement).files);
}
private readFile(index, files) {
return new Observable<any>(obs => {
const reader = new FileReader();
if (index >= files.length ) {
console.log(this.files);
obs.next({result: this.files});
return;
}
const file = files[index];
reader.onload = (e: any) => {
const bin = e.target.result;
this.files.push(e.target.result);
this.readFile(index + 1, files);
};
reader.readAsBinaryString(file);
});
}
Но единственный выход, который я получил из этогобыло:
Наблюдаемый {_isScalar: false, _subscribe: ƒ}
Что я не совсем уверен, что это значит ...
Как можноя правильно получить доступ к списку из FileReader?или что я делаю не так?