问题:项目采用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. 线上使用请对服务器请求筛选进行相关配置。
参考: