- 首先在组件中引入文件上传相关的服务和模块,如:
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, FormArray, Validators } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';
import { FileUploadService } from '../services/file-upload.service';
- 创建表单数组,其中需要在每个表单项中包含文件上传的相关信息,如文件对象、文件名等等。示例代码如下:
this.formArray = this.formBuilder.array([
this.formBuilder.group({
name: ['', Validators.required],
file: [null, Validators.required],
fileName: ['']
})
]);
- 在模板中渲染表单,并添加文件上传组件,如下:
- 在组件中实现文件上传的逻辑,根据文件上传成功后返回的URL等信息,更新表单中相应的文件名等信息。示例代码如下:
onFileChange(files: FileList, i: number) {
const reader = new FileReader();
if (files && files.length) {
const [file] = files;
reader.readAsDataURL(file);
reader.onload = () => {
this.formArray.controls[i].get('file').setValue(file);
this.formArray.controls[i].get('fileName').setValue(file.name);
};
}
}
uploadFile(i: number) {
const file = this.formArray.controls[i].get('file').value;
this.fileUploadService.upload(file).pipe(
map((event) => {
if (event.type === HttpEventType.Response) {
return event.body;
} else if (event.type === HttpEventType.UploadProgress) {
const percentDone = Math.round((100 * event.loaded) / event.total);
console.log(percentDone);
}
})
).subscribe((response) => {
console.log(response);
this.formArray.controls[i].