图片 3

从IIS6的maxRequestLength到IIS7的maxAllowedContentLengthFile-指定最大上传文件的大小

今天在测试一下上传文件的时候发现iis和配置存在上传文件大小限制(IIS默认大小30M,最大运行为2g:2147483647),百度了一部分资料有些发布到IIS好使,但是在VS调试中不好使。于是自己不断努力还是找到了问题点。不是说网上的不对,只不过是有些情况下忽略了一些步骤。我就总结了一下我本次的步骤。

   
这篇文章其实是老外写的,我只是把它翻译一下,因为我用asp.net做上传,有一个60+M的文件一直上传不了,查了好多资料都是说把Web.config里的system.web>>httpRuntime节点下的maxRequestLength属性改大一点,默认是4096kb,但是我照着修改之后并没有起作用,然后这个问题就困扰了我两天。直到我上了asp.net官方论坛,找到一篇2009年的文章,作者是Jeff
Widmer,他的文章完美解决了我的问题,所以把经验给大家分享一下。我是第一次写,所以就直接把他的文章翻译一下。

第一步:

配置web.config节点中的web节点:

 <system.web>
    <compilation debug="true" targetFramework="4.5"/>
    <!--主要是maxRequestLength属性-->
    <httpRuntime targetFramework="4.5" maxRequestLength="2147483647"  executionTimeout="6000"/>   
    <pages controlRenderingCompatibilityVersion="4.5" clientIDMode="AutoID"/>
  </system.web>

    在尽量尊重原文的基础上翻译如下:

第二步:

还是配置web.config节点,但是配置的是webServer节点。网上有人说这个是iis7以上才配置。

 <system.webServer>
    <security>
      <requestFiltering>
        <!--主要是maxAllowedContentLength属性-->
        <requestLimits maxAllowedContentLength="2147483647"></requestLimits>
      </requestFiltering>
    </security>
  </system.webServer>

注意:配置上以上两步之后在VS中只是破除了上传4M限制。请注意。我就是配置完这两步后,上传大于4M的好使了但是大于30的仍然不行。网上有些文档大部分都是说道这里。

    IIS6 使用system.web节点下的
maxRequestLength属性来指定最大上传文件的size,默认值是4M。IIS7使用system.webServer节点下的maxAllowedContentLength 属性来指定最大上传文件的size,默认值是28.6M.当把你的web
application从IIS6迁移到IIS7,有一些事情你必须当心。以下是我所发现的IIS7的这个新配置属性的一些内容……

第三步:

配置IIS限制,打开IIS,找到配置编辑器。

图片 1

 点击进入先在节点处 先选择节点:system.web/httpRuntime后,再在列表下面找到maxRequestLength属性配置上大小值。

图片 2

   
我把一些网站从IIS6迁移到IIS7后并没有很多问题。其中引起我注意的是新的IIS7属性节点(system.webServer)以及那些用于指定待上传文件的最大文件大小的属性。在把某个web
application从IIS6迁移IIS7后,一切似乎都很正常,直到一些客户开始抱怨一些上传问题,特别是一些差不多50M的大文件。

第四步:

不用退出第三步页面,继续切换节点到:system.webServer/security/requestFiltering后,找到requestLimits子节点,打开配置maxAllowedContentLength属性大小值。

图片 3

完成以后重新启动就可以上传文件了。

 

   
在IIS6中system.web,有一个叫maxRequestLength的配置属性位于httpRuntime 节点,你可以用这个属性来指定最大允许请求长度(换言之,即最大上传文件的大小)。在IIS6中,默认允许4096KB……所以,在IIS6.0下,一个4MB的文件是默认的上传大小。

   
现今4MB的文件相当小了,所以相当普遍的是重写这个默认值再另外输入一个值。对于我迁移到IIS7的web
application,我们把最大文件上传值增加到200MB(并且也告诉我们的客户200MB是最大的上传大小)。以下就是我们所设置的httpRuntime 节点:

<system.web> 
    <httpRuntime maxRequestLength="204800" executionTimeout="7200"/>

    所以我们把 web
application迁移到IIS7,测试了一些大文件的上传(我们测试用的是20MB的文件…下文留意此处)并且一切都很不错。在把网站介绍给我们的客户后,发布了几周我们收到了一堆客户不能上传文件的投诉。他们的文件大约50MB大小。

   
一开始我们很困惑,因为我们用200MB大小明确替换了配置属性并且那就是新的极限(或者是我们所认为的极限)并且远远大于4MB的文件是可以被上传的(我们测试了20MB的文件)。但是我们可以轻松重现客户不能上传50MB文件的场景。所以到底是怎么回事?

   
最后,我们追踪到IIS7并发现一个新的叫作system.webServer的节点。在IIS7中,我们已经知道httpHandlers 现在要在system.webServer/handlers节点下去指定,但是我们所不知道的是(直到我们的客户碰到了我们才发现),IIS7的最大请求长度设置也是在一个新的地方。在IIS7中,你要用maxAllowedContentLength 属性来指定最大待上传文件的大小(system.webServer/security/requestFiltering/requestLimits
>> maxAllowedContentLength).

<system.webServer> 
  <security> 
    <requestFiltering> 
      <requestLimits maxAllowedContentLength="209715200" ></requestLimits>

   
至此,我们的20MB文件为什么不会出错呢?因为在IIS7中,maxAllowedContentLength 属性的默认值是30000000
B:30000000 bytes = 28.6 MB.
所以在IIS7中,默认值增加到了28MB,因为我们没有注意到这点是因为我们仅用了20MB的文件(并且假设默认值是4MB)。最后我们很快解决了这个问题并且表明了我们在测试在突显的问题(我们本来应该测试一个200MB的文件的……那个我们告诉客户的极限值)

Technorati
Tags: ASP.NET,IIS7,IIS6,maxRequestLength,maxAllowedContentLength