我们以为的文件大小限制

我们大家都知道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.config中的httpRunti ...

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

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

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

  9. IIS7.5修改asp的文件上传限制方法

    第一.IIS7.5修改asp的文件上传限制方法 1.打开IIS 2.打开面板中的应用程序开发 asp 3.找到最后的限制属性 4.修改其中的最大请求实体主体限制的值:默认为200000字节,等于195 ...

随机推荐

  1. h5整理--详解css的相对定位和绝对定位

    浏览器默认状态下position的属性默认值是static也就是没有定位,元素出现在正常的文档流中,这个时候给元素设置的left,right.bottom.top这些偏移属性是没有效果的,不会生效: ...

  2. Jquery div展开收缩

    <html> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...

  3. 抽象工厂模式 shiyanlou

    二.什么是 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种软件开发设计模式.抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来.如果比较抽象工 ...

  4. INI配置文件分析小例子

    随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...

  5. c# htmtToPDF

    http://www.cnblogs.com/shanyou/archive/2012/09/07/2676026.html

  6. jQuery常用的插件及功能汇总-持续

    1.图片轮播 jquery.soChange.js 2.滚动展示 MSClass.js 3.md5加密 md5.js 4.cookie操作 cookie.js 5.

  7. XAMARIN +VS2015 ANDROID 开发判断gps 是否打开。

    在获取位置的时候首先要判断gps是否打开,如果没有打开就要提示打开,当然最友好的就是直接调转到打开界面. LocationManager alm = (LocationManager)this.Get ...

  8. loop 循环和检测点 9.3

    loop 指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址.对 IP 的修改范围都为:-128~127. 指令格式:loop 标号 操作: (cx)=(cx)- ...

  9. Tomcat的优化

    Tomcat的优化配置 修改tomcat的config目录下server.xml文件 <Connector port="9021"  protocol="HTTP/ ...

  10. bash快捷建

    bash快捷建 ctrl键组合ctrl+a:光标移到行首.ctrl+b:光标左移一个字母ctrl+c:杀死当前进程.ctrl+d:退出当前 Shell.ctrl+e:光标移到行尾.ctrl+h:删除光 ...