Angular:FileReader - 将文件夹输入中的文件存储在数组中
Angular: FileReader - Store Files from Folder-Input in Array
我上传文件夹时使用了这个输入:
<div class="form-group">
<input type="file" id="file" (change)="readInput($event)" webkitdirectory directory multiple >
</div>
该文件夹包含许多不同的 csv 文件。
为了处理输入,我有这个 Filereader。
readInput(fileChangeEvent: Event) {
return new Observable<any>(obs => {
const file = (fileChangeEvent.target as HTMLInputElement).files[0];
if (file) {
const fileReader = new FileReader();
fileReader.onload = e => {
obs.next({
result: fileReader.result
});
};
fileReader.readAsText(file);
}
});
}
现在,我的 Filereader 的 Observable 似乎 return 文件夹中随机文件的内容。我想做的是将不同的文件内容保存在一个数组中,以便我稍后可以在代码中访问它们。
我尝试的是将结果添加到 observable 中的数组:
filearray = []
readInput(fileChangeEvent: Event) {
return new Observable<any>(obs => {
const file = (fileChangeEvent.target as HTMLInputElement).files[0];
if (file) {
const fileReader = new FileReader();
fileReader.onload = e => {
obs.next({
this.filearray.push(result);
});
};
fileReader.readAsArrayBuffer(file);
}
});
}
但这导致数组为空。
如何将文件保存在数组中?有没有比 FileReader 更容易处理文件夹输入的方法?
我建议使用像 angular-file-uploader
这样的 npm 包
Angular file uploader is an Angular 2/4/5/6 file uploader module with
Real-Time Progress Bar, Angular Universal Compatibility and multiple
themes which includes Drag and Drop and much more.
演示:https://kzrfaisal.github.io/#/afu
这里有一个例子How to handle folder uploads in Angular,如果你想实现你自己的解决方案。
要克隆一个完整示例 Creating a File Upload Component in Angular with a complete github repo。
您正在上传一个文件夹,并且只能访问该文件夹中的一个文件 (file[0]
)。
如果你需要读取所有的文件,你可以这样尝试:
readInput(fileChangeEvent: Event) {
this.readFile(0, files);
}
private readFile(index, files) {
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);
}
我上传文件夹时使用了这个输入:
<div class="form-group">
<input type="file" id="file" (change)="readInput($event)" webkitdirectory directory multiple >
</div>
该文件夹包含许多不同的 csv 文件。 为了处理输入,我有这个 Filereader。
readInput(fileChangeEvent: Event) {
return new Observable<any>(obs => {
const file = (fileChangeEvent.target as HTMLInputElement).files[0];
if (file) {
const fileReader = new FileReader();
fileReader.onload = e => {
obs.next({
result: fileReader.result
});
};
fileReader.readAsText(file);
}
});
}
现在,我的 Filereader 的 Observable 似乎 return 文件夹中随机文件的内容。我想做的是将不同的文件内容保存在一个数组中,以便我稍后可以在代码中访问它们。
我尝试的是将结果添加到 observable 中的数组:
filearray = []
readInput(fileChangeEvent: Event) {
return new Observable<any>(obs => {
const file = (fileChangeEvent.target as HTMLInputElement).files[0];
if (file) {
const fileReader = new FileReader();
fileReader.onload = e => {
obs.next({
this.filearray.push(result);
});
};
fileReader.readAsArrayBuffer(file);
}
});
}
但这导致数组为空。
如何将文件保存在数组中?有没有比 FileReader 更容易处理文件夹输入的方法?
我建议使用像 angular-file-uploader
这样的 npm 包Angular file uploader is an Angular 2/4/5/6 file uploader module with Real-Time Progress Bar, Angular Universal Compatibility and multiple themes which includes Drag and Drop and much more.
演示:https://kzrfaisal.github.io/#/afu
这里有一个例子How to handle folder uploads in Angular,如果你想实现你自己的解决方案。
要克隆一个完整示例 Creating a File Upload Component in Angular with a complete github repo。
您正在上传一个文件夹,并且只能访问该文件夹中的一个文件 (file[0]
)。
如果你需要读取所有的文件,你可以这样尝试:
readInput(fileChangeEvent: Event) {
this.readFile(0, files);
}
private readFile(index, files) {
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);
}