从IIS6的maxRequestLength到IIS7的maxAllowedContentLengthFile-指定最大上传文件的大小
这篇文章其实是老外写的,我只是把它翻译一下,因为我用asp.net做上传,有一个60+M的文件一直上传不了,查了好多资料都是说把Web.config里的system.web>>httpRuntime节点下的maxRequestLength属性改大一点,默认是4096kb,但是我照着修改之后并没有起作用,然后这个问题就困扰了我两天。直到我上了asp.net官方论坛,找到一篇2009年的文章,作者是Jeff Widmer,他的文章完美解决了我的问题,所以把经验给大家分享一下。我是第一次写,所以就直接把他的文章翻译一下。
在尽量尊重原文的基础上翻译如下:
IIS6 使用system.web节点下的 maxRequestLength属性来指定最大上传文件的size,默认值是4M。IIS7使用system.webServer节点下的maxAllowedContentLength 属性来指定最大上传文件的size,默认值是28.6M.当把你的web application从IIS6迁移到IIS7,有一些事情你必须当心。以下是我所发现的IIS7的这个新配置属性的一些内容……
我把一些网站从IIS6迁移到IIS7后并没有很多问题。其中引起我注意的是新的IIS7属性节点(system.webServer)以及那些用于指定待上传文件的最大文件大小的属性。在把某个web application从IIS6迁移IIS7后,一切似乎都很正常,直到一些客户开始抱怨一些上传问题,特别是一些差不多50M的大文件。
在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