【.Net Core】上传大文件报413错误

项目中通过webapi上传pdf文件到服务器中,当需要上传50M左右的文件时,出现了413错误

一、413错误解决方案

1.修改Nginx配置

配置文件nginx.conf的http{}中增加client_max_body_size设置,如果不设置的话,client_max_body_size默认大小为1m

http{
	client_max_body_size  200M;
 }
2.修改web.config文件

项目为微服务模式,文件上传涉及了web和文档模块,则两边都需要调整web.config,通过设置maxAllowedContentLength来限制IIS模式启动是上传文件的最大大小。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore requestTimeout="00:20:00" processPath="dotnet" arguments=".\MvcWeb.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
      <security>
          <requestFiltering>
              <requestLimits maxAllowedContentLength="52428800" />
          </requestFiltering>
      </security>
    </system.webServer>
  </location>
</configuration>
3.修改Startup.cs

限制内核模式启动时上传文件的最大大小

services.Configure<FormOptions>(options =>
{
	options.MultipartBodyLengthLimit = 52428800;//50M
});
4.修改Controller方法

在对应的控制器方法上增加[DisableRequestSizeLimit]属性,

[HttpPost]
[DisableRequestSizeLimit]
public int UploadFile([FromForm]FileModel entity, IFormFile file)
{
	renturn 0;
}

二、Request body too large解决方案

经过上述的调整后,本地启动项目测试上传50M文件能够成功,发布测试环境之后,文件上传失败,出现了Request body too large错误。通过查询官方文档发现MaxRequestBodySize默认大小是30000000字节,约28.6M,通过如图的测试,确认是MaxRequestBodySize设置问题导致的文件上传失败。
在这里插入图片描述

在本地启动时,是通过IIS,而测试环境是部署在Linux系统下,通过nginx转发kestrel实现,所以需要在Startup.cs中加以下代码:

services.Configure<KestrelServerOptions>(options =>
{
	options.Limits.MaxRequestBodySize = 52428800; //MaxRequestBodySize默认是28.61MB(30,000,000 bytes)
});

重新部署之后,测试50M文件能够成功上传。

关于.Net Core中上传文件大小限制(微服务) https://blog.csdn.net/Cool_ketchup/article/details/118489652

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值