以上传 图片为例
1.model中 Student模型 增加一个string类型的 文件名称 属性,用于记录文件名 如:
- public class Student //Model名称
- {
- public int Id { get; set; }
-
- public string Name { get; set; }
-
- public ClassNameEnum ClassName { get; set; }
-
- public string Email { get; set; }
-
- public string PhotoFileName { get; set; } //数据库中字段
- }
2.在 ViewModel 中把 PhotoFileName 属性 返回值 改为 IFormFile 类型,用于接受 文件 其他属性不变 如:
- public class StudentPhoto //ViewModel名称
- {
- public int Id { get; set; }
-
- public string Name { get; set; }
-
- public ClassNameEnum ClassName { get; set; }
-
- public string Email { get; set; }
-
- public IFormFile PhotoFileName { get; set; } //改变
- }
3.前端视图 添加前端代码,asp-for="@Model.PhotoFileName" 会自动生成 Tpye=file,如:
for="@Model.PhotoFileName" class="form-control custom-file-input" />
4.构造函数 注入 IWebHostEnvironment 用于获取 asp.net core MVC WebRootPath(网站根目录) 本机的wwwroot路径
-
- private readonly IWebHostEnvironment hostEnvironment;
-
- public HomeController(IWebHostEnvironment hostEnvironment)
- {
- this.hostEnvironment = hostEnvironment;
- }
5.在控制器 方法中 添加 操作 如:
- [HttpPost]
- public IActionResult Create(StudentPhoto model)
- {
- if (ModelState.IsValid)
- {
- //将 webRoot路径与 images 路径合并到一起
- string ImgWebPath = Path.Combine(hostEnvironment.WebRootPath, "images");
-
- //生成一个唯一的 文件名
- string fileName = Guid.NewGuid().ToString() + "_" + model.PhotoFileName.FileName;
-
- //组合绝对路径:images路径+文件名
- string FullName = Path.Combine(ImgWebPath, fileName);
-
- //将文件 拷贝到 images文件夹中
- model.PhotoFileName.CopyTo(new FileStream(FullName, FileMode.Create));
- Student student = new Student
- {
- Name = model.Name,
- Email = model.Email,
- ClassName = model.ClassName,
- PhotoFileName = fileName
- };
- //添加到数据库中
- Student newStudent = _studentRepository.AddStudent(student);
- return View("OneStudent", newStudent);
- }
- return View();
- }
多文件上传
1.改变 第2步 ViewModel 文件为:
- public class StudentPhoto //ViewModel名称
- {
- public int Id { get; set; }
-
- public string Name { get; set; }
-
- public ClassNameEnum ClassName { get; set; }
-
- public string Email { get; set; }
-
- public List
PhotoFileName { get; set; } //多文件上传 - }
2.修改 第3步 前端视图 增加 multiple 属性,支持多文件上传
for="@Model.PhotoFileName" multiple class="form-control custom-file-input" />
最后 需要在 form表单添加 enctype 如: