ASP.NET文件上传大小II限制修改
2015-08-21 16:09
811 查看
我们大家都知道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));
}
}
}
实际测试
上传小于4M的文件
选择2.7M的pdf文件上传
上传提示成功
2. 上传大于4M的文件
选择上传4.3M的pdf文件
上传后报黄页
3. 修改web.config文件,设置可上传文件大小限制
修改web.config,增大可上传文件的大小限制,增大执行时间限制
<httpRuntime targetFramework="4.5"
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
2. IIS作为windows平台上承载ASP.NET的法定服务器,按照正常逻辑来说,其也能统一设置发送到自己这里请求的大小限制。同时由于IIS只将针对特定类型的文件的请求路由到ASP.NET进行处理,像js、css和图片等请求是不受ASP.NET中请求大小的限制的,这也从一个侧面说明有必要再IIS中添加控制。
3. 请求的长度校验只有先通过IIS的限制后,才有可能路由到ASP.NET,只有最终通过ASP.NET的长度限制校验,才能正常的进行后续的管道处理步骤。
<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));
}
}
}
实际测试
上传小于4M的文件
选择2.7M的pdf文件上传
上传提示成功
2. 上传大于4M的文件
选择上传4.3M的pdf文件
上传后报黄页
3. 修改web.config文件,设置可上传文件大小限制
修改web.config,增大可上传文件的大小限制,增大执行时间限制
<httpRuntime targetFramework="4.5"
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的长度限制校验,才能正常的进行后续的管道处理步骤。
相关文章推荐
- 【.Net码农】ASP.NET数据控件的自定义模板
- Jasper Report(3)--- 用JavaBean Collection做为数据源
- asp.net ajax
- Jasper Report (2)--- 用JDBC做为数据源
- Asp.net mvc项目分页功能
- Jasper Report (1)--- Eclipse集成Ireport插件
- asp.net图片分布式存储
- CasperJS,基于PhantomJS的工具包
- ASP入门(十九)- SELECT 语句
- ASP入门(十八)-访问Access中的数据库
- IIS网站或系统验证码不显示问题——"使用了托管的处理程序,但是未安装或未完整安装 ASP.NET"
- Phantomjs 根据Casperjs源码拓展download方法
- ASP.Net零碎
- Asp.net+MVC
- 简单记录在Visual Studio 2013中创建ASP.NET Web API 2
- Win10 兼容性 Visual studio web应用程序 ASP.NET 4.0 尚未在 Web 服务器上注册
- asp网站后台里嵌入kindeditor在线编辑器问题
- NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式
- Aspose.Words使用教程之插入文档元素(三)
- Aspose.Words使用教程之插入文档元素(三)【连载】