.Net6/.Net8(.Net Core) IIS中部署 使用 IFormFile 上传大文件报错解决方案

描述 

 最近使用.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内就可以上传成功

.Net6/.Net8(.Net Core) IIS中部署 使用 IFormFile 上传大文件报错解决方案_第1张图片

.Net6/.Net8(.Net Core) IIS中部署 使用 IFormFile 上传大文件报错解决方案_第2张图片 

方法二:修改.Net Core项目发布后web.config文件(个人推荐)

代码如下:


	  
		
		  
		  
		
	  

 web.config示例截图如下

 .Net6/.Net8(.Net Core) IIS中部署 使用 IFormFile 上传大文件报错解决方案_第3张图片

 上面方法任选其一即可

.Net Core代码如下:

上面IIS请求筛选配置完后项目Program中加入以下代码

 var builder = WebApplication.CreateBuilder(args);
 //修改FormOptions(用于将读取请求正文配置为 HTTP 窗体的选项)配置
 builder.Services.Configure(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(options =>
 {
     options.Limits.MaxRequestBodySize = int.MaxValue; // 默认大约为 28.6MB 当前为2G
 });

 //为 IIS 进程内提供配置
 builder.Services.Configure(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 

你可能感兴趣的:(.netcore)