关于c#mvc框架下大文件上传 C# .core+layui大文件上传

问题:项目采用layui+c#.core,在上传时遇到反馈网络错误和413文件过大错误,

原因:在.net core中,当上传文件大于30MB时,会报出: 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值的问题。

解决:

除对iis服务器进行相关配置,代码段也要进行处理。

layui页面部分基本不用做处理,后台端配置代码如下。

1. Startup.cs中ConfigureServices 

services.Configure<FormOptions>(options =>
{
    options.ValueLengthLimit = int.MaxValue;
    options.MultipartBodyLengthLimit = 4294967296;
    options.MultipartHeadersLengthLimit = int.MaxValue;
});

2. 上传方法添加特性[RequestSizeLimit(1073741824)]//1G大小

        [HttpPost]
        [RequestSizeLimit(1073741824)]
        public async Task<IActionResult> Post(List<IFormFile> files)
        {
            long size = files.Sum(f => f.Length);

            foreach (var formFile in files)
            {
                var filePath = @"F:\UploadingFiles\" + formFile.FileName.Substring(formFile.FileName.LastIndexOf("\\") + 1);//注意formFile.FileName包含上传文件的文件路径,所以要进行Substring只取出最后的文件名

                //创建目录
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                if (formFile.Length > 0)
                {
                    using (var stream = new FileStream(Path.Combine(path, formFile.FileName), FileMode.Create))
                    {
                        await formFile.CopyToAsync(stream);
                    }
                }
            }

            return Ok(new { count = files.Count, size });
        }

3. web.config配置 

请注意,在core创建的项目里面通常是没有 “web.config” 文件的。请务必创建添加一个。

上传大文件时需要配置下文件的大小,需要在 “config” 文件里配置。创建一个或复制一个 “web.config”,

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <!--单位:字节。 -->
        <requestLimits maxAllowedContentLength="1073741824" />
        <!-- 1 GB -->
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

4. 线上使用请对服务器请求筛选进行相关配置。

参考:

参考文案1:日常采坑:.NetCore上传大文件 - 冬先生 - 博客园 (cnblogs.com)

参考文案2:.NET Core 如何上传文件及处理大文件上传 - 刘小吉 - 博客园 (cnblogs.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值