我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.config中的httpRuntime元素中添加maxRequestLength属性设置大小,同时为了支持大文件上传超时可以添加executionTimeout属性设置超时时间。网上有很多这样的例子,但实际情况是否是这样吗?

 
<httpRuntime maxRequestLength="" executionTimeout=""/>
 
测试环境
 
IIS 7.5、.NET 3.5 sp1
 
测试页面UploadFile.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UploadFile.aspx.cs" Inherits="UploadFile" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" />
</div>
</form>
</body>
</html>
测试页面UploadFile.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class UploadFile : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (FileUpload1.FileContent != null)
{
FileUpload1.SaveAs(Server.MapPath("/Files/"+FileUpload1.FileName));
}
}
}
实际测试
 
1.上传小于4M的文件
 
选择2.7M的pdf文件上传

上传提示成功

 2. 上传大于4M的文件

 选择上传4.3M的pdf文件
 
 
上传后报黄页

3. 修改web.config文件,设置可上传文件大小限制
 
修改web.config,增大可上传文件的大小限制,增大执行时间限制
 
<httpRuntime maxRequestLength="2048000" executionTimeout="600"/>
 
 重新选择刚才4.3M的pdf文件,重新上传

上传成功
 
4. 上传大于30M的的文件
 
 碰到这个问题的实际环境是我们使用了第三方的上传文件组件,通过js调用第三方的ActiveX控件上传文件,修改web.config后上传大于30M的文件的时候,报了如下错误

查看windows系统日志,可以看到如下的日志错误,看到异常信息,我们可以猜测到是请求超长,但是我们设置了最大请求长度了啊,而且远远要大于30M。静下来想一想可能是IIS限制的,查询相关的IIS资料,发现果然是这样。
 
异常消息: 超过了最大请求长度。
在 System.Web.HttpRequest.GetEntireRawContent()
在 System.Web.HttpRequest.GetMultipartContent()
在 System.Web.HttpRequest.FillInFormCollection()
在 System.Web.HttpRequest.EnsureForm()
在 System.Web.HttpRequest.get_HasForm()
在 System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull)
在 System.Web.UI.Page.DeterminePostBackMode()
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
 
5. 修改IIS的配置
 
选中自己的站点,并双击“请求筛选”

选择右侧的”编辑功能限制”

在弹出的页面中,我们看到默认请求限制正是30M

修改请求大小限制为合适的值即可,保存后重启站点即可。
                         
 
总结
 
1. Asp.NET作为微软的Web服务框架,其定义了web请求的大小限制和执行时间限制。同时其为上传文件提供了基础的框架,并为我们提供了UploadFile服务器控件,其最终也是通过Http将文件数据传输到服务器端,自然也受请求大小和执行时间的限制,只是一般的请求都打不到这个极限,往往是上传文件的时候才会触及这个阀值。
 
2. IIS作为windows平台上承载ASP.NET的法定服务器,按照正常逻辑来说,其也能统一设置发送到自己这里请求的大小限制。同时由于IIS只将针对特定类型的文件的请求路由到ASP.NET进行处理,像js、css和图片等请求是不受ASP.NET中请求大小的限制的,这也从一个侧面说明有必要再IIS中添加控制。
 
3. 请求的长度校验只有先通过IIS的限制后,才有可能路由到ASP.NET,只有最终通过ASP.NET的长度限制校验,才能正常的进行后续的管道处理步骤。

ASP.NET文件上传大小的限制解决方案的更多相关文章

  1. [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制

    原文出处: 原文作者:云中岳 原文链接:http://www.cnblogs.com/netlover/archive/2011/07/08/Win7_IIS_Upload.html IS 7 默认文 ...

  2. IIS限制ASP.Net 文件上传大小解决方案,修改IIS7/7.5配置

    当在web.config中设置了 httpruntime 后还是无法成功上传大文件,则要修改IIS的系统config IIS 7 默认文件上传大小是30M 要突破这个限制: 修改IIS的applica ...

  3. 你以为的ASP.NET文件上传大小限制是你以为的吗

    我们以为的文件大小限制 我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.confi ...

  4. 修改ASP.NET文件上传大小限制

    转自:http://www.hello-code.com/blog/asp.net/201603/5954.html 要点: 1.web.config中的<httpRuntime maxRequ ...

  5. ASP.NET文件上传大小限制

    上传限制 我们以为的文件大小限制 我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web. ...

  6. IIS文件上传大小修改配置说明

    原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大小时30M). 解决:IIS7更改asp.net文件上传大小限制 步骤如下: 1.    修改I ...

  7. ASP.NET中的文件上传大小限制的问题

    一.文件大小限制的问题 首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文 ...

  8. asp.net 文件上传示例整理

    ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录.  代码如下 复制代码 ...

  9. zt对于C#中的FileUpload解决文件上传大小限制的问题设置

    对于C#中的FileUpload解决文件上传大小限制的问题设置 您可能没意识到,但对于可以使用该技术上载的文件的大小存在限制.默认情况下,使用 FileUpload 控件上载到服务器的文件最大为 4M ...

随机推荐

  1. SQLServer基本函数

    1.字符串函数  长度与分析用 datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格 substring(expression,start,length) 取子串 ri ...

  2. tomcat黑/白名单设置

    vim $tomcat_home/conf/server.xml(可以单个IP或者多个ip,多个ip用|分隔,支持正则) <Context path=" reloadable=&quo ...

  3. 关于CocoaPods update/CocoaPods install 慢、没反应、卡住的解决方案(Pods升级步骤)

    pod管理第三方库带来的便利大家有目共睹,但是--,估计有很多人会遇到这样一种尴尬情况: Pod install 或 Pod update  执行之后,就不动了,一直一个界面简直要崩溃... 网上有很 ...

  4. WIN 下的超动态菜单(二)用法

    WIN 下的超动态菜单(一)简介 WIN 下的超动态菜单(二)用法 WIN 下的超动态菜单(三)代码 作者:黄山松,发表于博客园:http://www.cnblogs.com/tomview/     ...

  5. 挤点时间写博客-php&MySQL实践

    hi 晚上要吃火锅的嘛,挤点时间写点东西吧,别被老板发现哦 1.PHP与MySQL 五.文章发布系统之后台 5.2 创建配置文件和初始化文件 为了统一配置以及管理方便,还有就是减少代码的冗余. 分别为 ...

  6. 网格弹簧质点系统模拟(Spring-Mass System by Euler Integration)

    弹簧质点模型是利用牛顿运动定律来模拟物体变形的方法.如下图所示,该模型是一个由m×n个虚拟质点组成的网格,质点之间用无质量的.自然长度不为零的弹簧连接.其连接关系有以下三种: 1.连接质点[i, j] ...

  7. 06章 Struts2数据校验

    一.三种实现方式 ① 用validate()方法实现数据校验 继承ActionSupport类,该类实现了Validateable接口,该接口中定义了一个validate()方法,在自定义的Actio ...

  8. ADO.Net属性扩展

    属性扩展 大体意思:有外键关系时将代号化信息处理成原始文字 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展一个显示nation名称的属性 using ...

  9. 读取另一个项目中方法的json

    A项目中的被调用方法: public class Eg1Action { public void save(){        write("{\"state\":1,\ ...

  10. guava

    原文出处: 黄博文 如果我要新建一个java的项目,那么有两个类库是必备的,一个是junit,另一个是Guava.选择junit,因为我喜欢TDD,喜欢自动化测试.而是用Guava,是因为我喜欢简洁的 ...