大文件,就是内容的大小超过了一定数量的文件,比如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节点。