Javascript 通过AJAX POST请求(IIS 7、ASP.NET MVC 4)将大文件传递到服务器时出错

Javascript 通过AJAX POST请求(IIS 7、ASP.NET MVC 4)将大文件传递到服务器时出错,javascript,jquery,asp.net,.net,asp.net-mvc,Javascript,Jquery,Asp.net,.net,Asp.net Mvc,这是我在StackOverflow上的第一篇文章,所以如果我的问题是非常规的,我提前道歉。我在一个intranet站点上有一个表单,允许用户通过将文件传递到服务器上传文件。这段代码在较小的文件(测试最高可达900kb)上运行正常,但较大的文件(9mb)会产生500个错误,甚至不会到达服务器。 我的一位同事说,当试图将大文件传递到服务器时,IIS有时会与您发生冲突,因此我将此建议代码添加到我的web配置中,但没有效果 <system.webServer> <security>

这是我在StackOverflow上的第一篇文章,所以如果我的问题是非常规的,我提前道歉。我在一个intranet站点上有一个表单,允许用户通过将文件传递到服务器上传文件。这段代码在较小的文件(测试最高可达900kb)上运行正常,但较大的文件(9mb)会产生500个错误,甚至不会到达服务器。

我的一位同事说,当试图将大文件传递到服务器时,IIS有时会与您发生冲突,因此我将此建议代码添加到我的web配置中,但没有效果

<system.webServer>
<security>
  <requestFiltering>
    <!-- maxAllowedContentLength is in bytes (B)  -->
    <requestLimits maxAllowedContentLength="20971520"/>
    <!-- 20MB -->
  </requestFiltering>
</security>
</system.webServer>


我怀疑这是在耍我,但坦率地说,我已经没有主意了。请告知SO Community

一般来说,您不受客户端文件大小的限制,而是几乎总是服务器端的。IIS中的默认值相当低,以防止人们上载运行服务器空间不足的文件。比如,想想那些允许人们上传数十亿字节视频文件的服务;如果浏览器一开始就阻止了这些上传,它们就不存在了

上面显示的是正确使用
FormData
来执行支持AJAX的文件上载

对于ASP.NET应用程序,您可能还需要在web.config中配置
节点的
maxRequestLength
属性。请注意,此值在KB中指定,而
maxAllowedContentLength
字节中指定

总之,要允许文件上传到20MB,您的
web.config
文件中应该有以下设置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <!-- 20 MB specified in kilobytes -->
    <httpRuntime maxRequestLength="20480" />
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- maxAllowedContentLength is in bytes (B)  -->
        <requestLimits maxAllowedContentLength="20971520"/>
        <!-- 20MB -->
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

您是否在IIS管理器中安装了该服务?是的,但请求从未发送到服务器,这意味着该服务从未涉及该错误。我可能应该把这一点从问题中去掉
<system.webServer>
<security>
  <requestFiltering>
    <!-- maxAllowedContentLength is in bytes (B)  -->
    <requestLimits maxAllowedContentLength="20971520"/>
    <!-- 20MB -->
  </requestFiltering>
</security>
</system.webServer>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web>
    <!-- 20 MB specified in kilobytes -->
    <httpRuntime maxRequestLength="20480" />
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- maxAllowedContentLength is in bytes (B)  -->
        <requestLimits maxAllowedContentLength="20971520"/>
        <!-- 20MB -->
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>
var file = $('#eval-attachment-modal-file')[0].files[0];
if (file && file.size <= 20971520) {
    // proceed with upload
} else {
    // file too large, show error
}