学习了普通webapp中上传文件,再看看从MVC项目中通过缓冲方式上传文件到物理文件夹。这两者的区别主要是webapp通过模型绑定的方式传递IFormFile对象,而mvc通过控制器和action传递IFormFile对象,后续对IFromFile对象的处理其实差不多。
运行下列命令创建mvc项目。
dotnet new mvc -o UploadFileByMVC
code -r UploadFileByMVC
直接在默认的HomeController类中增加下列两个函数用于上传多个文件和单个文件,代码参照参考文献1-2.
[HttpPost]
public async Task<IActionResult> UploadMultiFile(List<IFormFile> files)
{
long size = files.Sum(f => f.Length);
foreach (var formFile in files)
{
var filePath = Path.Combine(_targetFilePath, formFile.FileName);
if (formFile.Length > 0)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(stream);
}
}
}
return Ok(new { count = files.Count, size });
}
[HttpPost]
public async Task<IActionResult> UploadSingleFile(IFormFile file)
{
var filePath = Path.Combine(_targetFilePath, file.FileName);
if (file.Length > 0)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
return Ok(new { count = 1 ,file.Length });
}
页面就是将之前上传单个文件和多个文件的表单混在了一起,代码和截图如下:
<p>多文件上传:</p>
<form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="UploadMultiFile">
<div>
<input type="file" name="files" multiple />
</div>
<div>
<input type="submit" value="Upload" />
</div>
</form>
<p>单文件上传:</p>
<form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="UploadSingleFile">
<div>
<input type="file" name="file" />
</div>
<div>
<input type="submit" value="Upload" />
</div>
</form>
程序比较简单,可以正常运行,微软示例中还包括列出缓冲文件夹的文件清单的功能,后面准备把这块代码剥处来放在本文的项目中。
参考文献:
[1]https://blog.csdn.net/tie123000/article/details/96868206
[2]https://blog.csdn.net/weixin_41960204/article/details/107575845?spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-14-107575845-blog-96868206.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-14-107575845-blog-96868206.pc_relevant_paycolumn_v3