描述
最近使用.Net6 WebAPI IFormFile对象接收上传文件时大于30MB(兆)的文件就会报错
原因分析
IIS上传文件有大小默认限制大约28.6MB
解决办法
.无论是Net6还是.Net8写法都一样
方法一:IIS可视化操作
1.打开Internet Information Services (llS)管理器,选中主页
2. 双击打开请求筛选
3. 点击编辑功能设置
4.修改允许的最大内容长度(字节)的值,默认值为30000000字节(除以两次1024单位换算后约28.6MB),我这里修改为:2147483647 大约2G,此时上传文件大小在2G内就可以上传成功
方法二:修改.Net Core项目发布后web.config文件(个人推荐)
代码如下:
<system.webServer>
<security>
<requestFiltering>
<!-- Handle requests up to 2 GB -->
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
</system.webServer>
web.config示例截图如下
上面方法任选其一即可
.Net Core代码如下:
上面IIS请求筛选配置完后项目Program中加入以下代码
var builder = WebApplication.CreateBuilder(args);
//修改FormOptions(用于将读取请求正文配置为 HTTP 窗体的选项)配置
builder.Services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = int.MaxValue; //每个多部分主体的长度限制,默认值约为128MB 当前为2G
options.ValueCountLimit = int.MaxValue; //要允许的表单条目数限制,默认为 1024个 当前为2147483647个
options.ValueLengthLimit = int.MaxValue; //单个窗体值的长度限制 大约为 4MB 当前为2G
});
//为 ASP.NET Core Kestrel Web 服务器配置选项
builder.Services.Configure<KestrelServerOptions>(options =>
{
options.Limits.MaxRequestBodySize = int.MaxValue; // 默认大约为 28.6MB 当前为2G
});
//为 IIS 进程内提供配置
builder.Services.Configure<IISServerOptions>(options =>
{
options.MaxRequestBodySize = int.MaxValue; // 默认大约为 28.6MB 当前为2G
});
参考资料
https://www.cnblogs.com/qingheshiguang/p/18017910
https://blog.csdn.net/weixin_44909642/article/details/136137773#:~:text=The%20default%20request%20limit%20%28maxAllowedContentLength%29%20is,30%2C000%2C000%20bytes%2C%20which%20is%20approximately%2028.6MB.
https://www.cnblogs.com/viazure/p/12712482.html
https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.aspnetcore.http.features.formoptions?view=aspnetcore-8.0