ASP.NET CORE 3.1 MVC构建文件上传工作流

步骤

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 接口

PROPERTIES
WebRootFileProvider获取或设置一个指向WebRootPathIFileProvider
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.验证

上传成功

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值