Angular问题-上传文件之前后端开发
问题描述:需要在前端上传文件之后在后端储存在当前系统运行环境中。
解决方案:
第一种情况
此时文件路径没有多级情况,可以通过FormData传递
//前端代码
//由于IFormFile 不能反序列化,所以不能将文件放入对象中
const formData = new FormData();
this.fileList.forEach((file: any) => {
formData.append('Files', file);
})
this.httpClient.post<any>(environment.apiServerURL + "DDiligence/EditData", formData).subscribe({
next: (res) => {
console.log(res);
if (res != null) {
}
},
error: (err) => {
console.error(err);
}
});
后端代码
如果是FileList 类型为 IFormFile[]
单个文件 IFormFile
[HttpPost]
public ActionResult<UpdateDDModel> Add(IFormFile[] FileList)
{
//写入系统运行环境
//文件要存放的路径
string FilePath = Path.Combine(Environment.CurrentDirectory, DateTime.Now.ToString("yyyy/MM/dd"));
//此时需要去判断该路径是否存在,不存在时写入会有问题
if (!Directory.Exists(FilePath))
{
Directory.CreateDirectory(FilePath);
}
Files.ToList().ForEach(file =>
{
string saveFilePath = Path.Combine(FilePath, file.FileName);
using (var fileStream = new FileStream(saveFilePath, FileMode.Create))
{
//使用文件流进行写入
file.CopyTo(fileStream);
};
});
}
第二种清空
当文件存在多级结构,需要将文件放入到对象中去一一对应时,
此时可以后端通过FormForm来进行接受。
前端将文件写入到FormData中,对象需要转换为JSON
//文件写入方式与第一种一样
//增加一种对象转为JSON,但是 文件不可放入到对象中进行转JSON
this.formData.set('DD_Stage_List', JSON.stringify(Object))
///后段接受
//RequestDDData 中定义参数的类型
public string? DD_Stage_List { get; set; }
public IList<IFormFile>? Kick_Off_File { get; set; }
[HttpPost]
public ActionResult<UpdateDDModel> Update([FromForm] RequestDDData request)
{
文件操作不变
}