html5文件上传-iis7报奇怪的404(NotFound)错误

最近碰到的最恶心的问题了,各种google各种请教无果,后来用chrome的开发工具仔细看了下web服务器的响应信息才知道原因。。。

记录一下,看看谁也碰到过。

背景

早些时候参考http://code.google.com/p/html5uploader/ 写了一个jquery的html5上传控件。

昨天在一个asp.net mvc3的网站中测试时遇到一些很恶心的问题:

1,文件小的时候,可以正常上传。(比如10M左右都可以。我改了web.config,<httpRuntime executionTimeout="300" maxRequestLength="2048000" />,理论上可以传200M)

2,在上传一个45MB的PSD文件时,报404错误。

    404啊。。。一般是web server找不到资源时才会报的错误,怎么可能在文件上传的时候抛出这种类型的异常呢???最要命的是文件比较小的时候是正常的。

 

chrome 控制台报的错误:

Failed to load resource: the server responded with a status of 404 (Not Found)

 

chrome network监控默认视图:

点击进去后的视图   

 

问题是什么?

用chrome看服务器响应信息的时候,一般是上面这两个视图。。。

大多数的同学可能都忽略了右边的“Preview”和"Response"这两个tab。。只会看看headers里面的基本信息,知道问题是404 not found,但是不知具体的原因

太坑爹了,我也找了一天的原因才跑去点击“Preview”和“Reponse”!!!

其实问题和我一开始预想的一样,肯定和服务器配置相关,iis服务器对于http请求的文件流默认有大小限制。

但是根据msdn文档我已经把maxRequestLength改的够大的了,难道还有别的配置项影响么??

来个"Preview" tab的截图

 

 

 

解决办法

上面的截图已经够清楚的了,

1,在iis里面除了System.Web 段落的maxRequestLength需要修改至合适的大小外.单位是kb

<httpRuntime executionTimeout="300" maxRequestLength="2048000"/>

 

2,在System.WebServer段落的地方,要修改maxAllowedContentLength,单位是btye。例如下面的配置设成300M

     

        <!--影响上传大小的配置maxAllowedContentLength,iis7默认是30000000 bytes即30M,以下配置为300M-->
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="300000000"></requestLimits>
</requestFiltering>
</security>

 

 

其他注意点:

html5 ajax上传时需使用html5提供的FileReader在客户端读取文件,在chrome里面,可以使用FormData对象,作为xmlhttprequest实例的send方法的参数的值。也可以使用window.btoa方法将文件转换成base64编码的文本流,然后做为send方法的参数的值。如果使用btoa,实际传输的字节数要比文件本身的大小要大。

 

参考资料  

1,IIS7 needs both maxRequestLength and maxAllowedContentLength. Why?

http://forums.asp.net/t/1637223.aspx/1 

2,maxRequestLength and IIS7

http://forums.iis.net/p/1150009/1993988.aspx

 

 

posted @ 2011-11-20 22:12  Mamboer  阅读(9851)  评论(0编辑  收藏  举报