继续学习如何上传多个文件,有了之前的学习内容,再学习多个文件上传就比较快
先说后端如何改动。直接定义List<IFormFile>的属性,用于保存前端上传的文件集合,同时在OnPostUploadAsync函数中利用循环逐个保存文件内容,详细的代码如下所示:
public List<IFormFile> MultiFiles { get; set; }
public string Result { get; private set; }
public async Task<IActionResult> OnPostUploadAsync()
{
if (!ModelState.IsValid)
{
Result = "Please correct the form.";
return Page();
}
foreach(IFormFile formFile in MultiFiles)
{
byte[] formFileContent=null;
try
{
using (var memoryStream = new MemoryStream())
{
await formFile.CopyToAsync(memoryStream);
if (memoryStream.Length == 0)
{
ModelState.AddModelError(formFile.FileName,"file is empty.");
}
formFileContent=memoryStream.ToArray();
}
}
catch (Exception ex)
{
ModelState.AddModelError(formFile.FileName,
"file upload failed. " + $"Please contact the Help Desk for support. Error: {ex.HResult}");
}
if (!ModelState.IsValid)
{
Result = "Please correct the form.";
return Page();
}
var filePath = Path.Combine(
_targetFilePath, formFile.FileName);
using (var fileStream = System.IO.File.Create(filePath))
{
await fileStream.WriteAsync(formFileContent);
}
}
Result = "File Upload Successfully.";
return Page();
}
前端代码基本保持不变,只是在指定上传文件的input标签内新增multiple属性,该属性规定允许用户输入到 元素的多个值。程序的执行效果见下图
如果要选择特定类型的文件,可以在指定上传文件的input标签内新增appept属性,并指定上传文件的类型,具体的类型说明见参考文献2.
还有两个地方没有搞明白,第一是IFormFile最大能上传多大的文件,第二是上传多个文件时,页面上仅显示选择了几个文件,没有列出文件清单,后续还要学学是怎么把文件清单列出来的。
参考文献
[1]https://www.runoob.com/tags/tag-input.html
[2]https://wenku.baidu.com/view/f34420e48aeb172ded630b1c59eef8c75fbf95c3.html