早上同事急冲冲跑过来告诉我,网站上传图片报错了,昨天还是好好的,今天突然不行了。然后讲的我自己都怀疑是自己犯错了,想到早上搞了服务器:IIS 7.5 设置域名 https 跳转和 www 跳转,功能是调好了,难道是因为这边修改导致图片上传报错了?

看了下报错内容:前端显示请求实体过大,response 里写了 413 Request Entity Too Large,意思是上传的文件过大了。这个报错不陌生,之前遇到过 解决413 Request Entity Too Large。不过那个是修改 Nginx 服务器配置。照理说,这是不应该的,因为服务器运行这么久也没报过这错。秉着“有则改之,无则加勉”的态度,还是去搜索了 IIS 413 Request Entity Too Large 的解决方法。

IIS上传文件报 413 Request Entity Too Large

这边复述一下解决过程。

首先修改 C:\Windows\System32\inetsrv\config 下的 applicationHost.config 文件。这是 IIS 服务器的配置文件,修改后需要重启 IIS 服务器才能生效:iisreset /stopiisreset /start

<location path="www.xxx.com">
    <system.webServer>
        <serverRuntime uploadReadAheadSize="10485760" />
    </system.webServer>
</location>

主要是在 serverRuntime 上添加了 uploadReadAheadSize="10485760" 属性,10485760 表示 10M。

之后是修改 web.config 文件。这里有两个地方要修改:
第一地方 configuration > system.web > httpRuntime 设置 maxRequestLength 属性:

<configuration>
  <system.web>
    <httpRuntime targetFramework="4.5" requestValidationMode="2.0" maxRequestLength="10485760" />
  </system.web>
</configuration>

第二个地方 configuration > system.webServer,修改 requestLimitsmaxAllowedContentLength 属性:

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="10485760" />
  </requestFiltering>
</security>

过程并不复杂,但还没等我测试呢,同事跟我讲已经好了。这不是我解决的,那么就是其他的原因了,后面查看上传后的图片地址发现,本地上传的路径是服务器,而线上上传到的阿里云的 OSS。猜测是上传到阿里云的通道阻塞了,之后又自己恢复了。