• asp.net core MVC 上传单文件与多文件


    以上传 图片为例

    1.model中 Student模型 增加一个string类型的 文件名称 属性,用于记录文件名 如:

    1. public class Student //Model名称
    2. {
    3. public int Id { get; set; }
    4. public string Name { get; set; }
    5. public ClassNameEnum ClassName { get; set; }
    6. public string Email { get; set; }
    7. public string PhotoFileName { get; set; } //数据库中字段
    8. }

    2.在 ViewModel 中把 PhotoFileName 属性 返回值 改为 IFormFile 类型,用于接受 文件 其他属性不变 如:

    1. public class StudentPhoto //ViewModel名称
    2. {
    3. public int Id { get; set; }
    4. public string Name { get; set; }
    5. public ClassNameEnum ClassName { get; set; }
    6. public string Email { get; set; }
    7. public IFormFile PhotoFileName { get; set; } //改变
    8. }

    3.前端视图 添加前端代码,asp-for="@Model.PhotoFileName" 会自动生成 Tpye=file,如:

    for="@Model.PhotoFileName" class="form-control custom-file-input" />

    4.构造函数 注入 IWebHostEnvironment 用于获取 asp.net core MVC WebRootPath(网站根目录)  本机的wwwroot路径

    1. private readonly IWebHostEnvironment hostEnvironment;
    2. public HomeController(IWebHostEnvironment hostEnvironment)
    3. {
    4. this.hostEnvironment = hostEnvironment;
    5. }

    5.在控制器 方法中 添加 操作 如:

    1. [HttpPost]
    2. public IActionResult Create(StudentPhoto model)
    3. {
    4. if (ModelState.IsValid)
    5. {
    6. //将 webRoot路径与 images 路径合并到一起
    7. string ImgWebPath = Path.Combine(hostEnvironment.WebRootPath, "images");
    8. //生成一个唯一的 文件名
    9. string fileName = Guid.NewGuid().ToString() + "_" + model.PhotoFileName.FileName;
    10. //组合绝对路径:images路径+文件名
    11. string FullName = Path.Combine(ImgWebPath, fileName);
    12. //将文件 拷贝到 images文件夹中
    13. model.PhotoFileName.CopyTo(new FileStream(FullName, FileMode.Create));
    14. Student student = new Student
    15. {
    16. Name = model.Name,
    17. Email = model.Email,
    18. ClassName = model.ClassName,
    19. PhotoFileName = fileName
    20. };
    21. //添加到数据库中
    22. Student newStudent = _studentRepository.AddStudent(student);
    23. return View("OneStudent", newStudent);
    24. }
    25. return View();
    26. }

    多文件上传

    1.改变  第2步 ViewModel 文件为:

    1. public class StudentPhoto //ViewModel名称
    2. {
    3. public int Id { get; set; }
    4. public string Name { get; set; }
    5. public ClassNameEnum ClassName { get; set; }
    6. public string Email { get; set; }
    7. public List PhotoFileName { get; set; } //多文件上传
    8. }

    2.修改 第3步 前端视图 增加 multiple  属性,支持多文件上传

    for="@Model.PhotoFileName" multiple class="form-control custom-file-input" />

    最后 需要在 form表单添加 enctype 如: 

    enctype="multipart/form-data">

  • 相关阅读:
    IO流:字符输入流Reader的超详细用法及底层原理
    java178-终篇?静态代理?动态代理?
    华为软件测试笔试真题之变态逻辑推理题
    使用 C# 读取 zip 压缩包解压文件的方法及注意事项
    ASPICE与ISO 21434:汽车软件与网络安全标准的协同与互补
    组合式 API 的优势
    基于ZYNQ的PCIE高速数据采集卡的设计(一)
    【数据结构与算法】不就是数据结构
    React为什么要使用Hooks以及个人的一些理解
    暑假学习IB课程,怎么学?
  • 原文地址:https://blog.csdn.net/q8812345qaz/article/details/127462872