.net core IIS/Kestrel上传大文件的解决方法

大文件,就是内容的大小超过了一定数量的文件,比如1个GB的文件。

站点一般会限制上传文件的大小,如果超过了一定限制,则会报错误。

在处理大文件上传的方式上,IIS代理和Kestrel宿主服务器的处理方式是不一样的。

一、Kestrel宿主服务器

 解决方法如下:

第一种处理方式:在需要处理大文件的接口中使用RequestSizeLimitAttribute特性。如:

        /// <summary>
        /// 上传文件
        /// </summary>
        [HttpPost("upload")]
        [RequestSizeLimit(1000_000_000)]
        public IActionResult Upload()
        {
           //......
        }

RequestSizeLimit(限制的容量大小),括号内就是需要限制的上送内容的大小值。 

第二种处理方式:在需要处理大文件的接口中使用DisableRequestSizeLimitAttribute特性。如:

        /// <summary>
        /// 上传文件
        /// </summary>
        [HttpPost("upload")]
        [DisableRequestSizeLimit]
        public IActionResult Upload()
        {
           //......
        }

DisableRequestSizeLimitAttribute特性是指禁用对Http请求的大小限制。该特性可以加在Controller和Action上。若无需要,尽可能不要用此种方式放开对请求内容大小的限制。

二、IIS代理服务器

IIS代理服务器只认web.config配置文件里面的maxAllowedContentLength字段值。

解决方法如下:

第一步:在项目中创建一个web.config文件,如果有的话,就省略此步骤。如:

在web.config文件中添加如下代码:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.webServer>
   
  </system.webServer>
</configuration>

第二步:将security节点加入到system.webServer节点中;

 <security>
      <requestFiltering>
        <!--单位:字节。 -->
        <requestLimits maxAllowedContentLength="524288000" />
        <!-- 1 GB -->
      </requestFiltering>
 </security>

完整的web.config内容如下所示:

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

maxAllowedContentLength的值就是允许上送内容的最大值。如果项目已经部署在服务器上,则可以直接在web.config的system.webServer节点下加入security节点。

原文地址:https://www.cnblogs.com/williamwsj/p/9641758.html