惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LangChain Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Recent Announcements
Recent Announcements
大猫的无限游戏
大猫的无限游戏
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
博客园 - 【当耐特】
博客园 - 叶小钗
I
InfoQ
MyScale Blog
MyScale Blog
H
Help Net Security
月光博客
月光博客
Vercel News
Vercel News
B
Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
D
DataBreaches.Net
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
GbyAI
GbyAI
Blog — PlanetScale
Blog — PlanetScale
博客园 - Franky

博客园 - Mamboer

[IE6]IE6:hover失效 Windows Command Line Find and replace - Made easy with FART.exe Editplus-关联yuicompressor进行JS和CSS的压缩 ubuntu-安装aptana3 Ubuntu-环境配置文件 Ubuntu安装Git客户端 Ubuntu安装Chrome最新版 ubuntu-restricted-extras 高效率编辑器VIM-操作篇 Ubuntu安装雅黑字体 试用Opera11.10 build2053 版本的speed dial功能 Building Vim on Ubuntu Ubuntu安装Mercurial utf-8格式之no bom和+bom [PM]-组织者角色 IE6问题Q&A,你懂的... Logo一个-小凡设计 正则表达式-用户名规则之只含汉字、数字、字母、下划线 如何bin部署sqlce4.0的ASP.NET mvc3网站
html5文件上传-iis7报奇怪的404(NotFound)错误
Mamboer · 2011-11-20 · via 博客园 - Mamboer

最近碰到的最恶心的问题了,各种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