步骤
1.构建了数据库实体以及仓储层及其服务类
2.IFormFile 接口
命名空间.AspNetCore.Http
PROPERTIES
ContentDisposition | 获取上载文件的原始Content-Disposition标头。 |
ContentType | 获取上载文件的原始Content-Type请求头 |
FileName | 从 Content-Disposition header获取文件名 |
Headers | 获取上传文件的header字典 |
Length | 获取文件字节长度 |
Name | 从Content-Disposition header中获取表单字段名称 |
Method
CopyTo(Stream) 将上传文件的内容复制到target
流中
CopyToAsync(Stream, CancellationToken) 异步将上传文件的内容复制到
target
流中
OpenReadStream()
打开请求流以读取上载的文件.
3.IWebHostEnvironment 接口
WebRootFileProvider | 获取或设置一个指向WebRootPath的IFileProvider |
WebRootPath | 获取或设置包含Web服务应用程序内容文件的目录的绝对路径 |
3.前端代码
注 意 : 要 上 传 文 件 , form 必 须 加 上 enctype="multipart/form-data"属性。 HTML 表单如何打包数据文件是由 enctype 属性决定的。 enctype 有以下几种取值: application/x-www-form-urlencoded:在发送前编码所有字符 (默认)(空格被编码为’+’,特殊字符被编码为 ASCII 十六进制字 符) multipart/form-data:不对字符编码。在使用包含文件上传控件 的 表 单 时 , 必 须 使 用 该 值 。 因 为 只 有 使 用 enctype="multipart/form-data",表单才会把文件的内容编码到 HTML 请求中
<form asp-action="Add" method="post" enctype="multipart/form-data">
<div class="form-group">
<label asp-for="Attachment"
class="control-label"></label>
<input asp-for="Attachment" type="file"
class="form-control" />
<span asp-validation-for="Attachment"
98
class="text-danger"></span>
</div>
<button type="submit">提交</button>
</form
4.实体类以及ViewModel
public class UpLoadFileEntity
{
[Display(Name = "附件")]
public string Attachment { get; set; }
public int Id { get; set; }
}
public class UpViewModel
{
[Display(Name = "附件")]
public IFormFile Attachment { get; set; }
}
5.控制器逻辑
[HttpPost]
public IActionResult Add(
[FromServices]IWebHostEnvironment env,
UpViewModel model)
{
//指前端那些表单验证无效/失败
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
string filename = string.Empty;//存储路径
if (model.Attachment != null)
{
//文件操作类需要导入using System.IO;
filename = Path.Combine("file", Guid.NewGuid().ToString() + Path.GetExtension(model.Attachment.FileName));
using (var stream = new FileStream(Path.Combine(env.WebRootPath, filename), FileMode.CreateNew))
model.Attachment.CopyTo(stream);
}
_service.Add(new UpLoadFileEntity
{
Attachment = filename
});
return RedirectToAction("index");
}
6.验证
上传成功