在上传文件时限制上传文件的大小,并捕捉超过文件大小限制的
2010-12-22 15:09
330 查看
在上传文件时,我们可以在web.config里设置允许上传的文件大小。但是,当上传的文件超过设置的限制时,在Application_Error事件里是无法捕捉到这个异常的。下面,就是捕捉上传文件超过设置大小的方法:
首先,在web.config里设置允许一次上传的文件的总大小;
Web.config 文件
其次,在Global里加入如下的代码:
C# 代码
最后,上传的页面设置如下:
ASPX 代码
首先,在web.config里设置允许一次上传的文件的总大小;
Web.config 文件
<httpRuntime maxRequestLength="400" executionTimeout="3600" appRequestQueueLimit="10000"/>
其次,在Global里加入如下的代码:
C# 代码
<%@ Application Language="C#" %> <%@ Import Namespace="System.Web.Configuration" %> <script RunAt="server"> protected void Application_BeginRequest(object sender, EventArgs e) { //本代码的功能是检查页面请求的大小,如果超过了配置文件maxRequestLength的设定值,就提示用户超过了所允许的文件大小。 //从配置文件里得到配置的允许上传的文件大小 HttpRuntimeSection runTime = (HttpRuntimeSection)WebConfigurationManager.GetSection("system.web/httpRuntime"); //maxRequestLength 为整个页面的大小,不仅仅是上传文件的大小,所以扣除 100KB 的大小, //maxRequestLength单位为KB int maxRequestLength = (runTime.MaxRequestLength - 100) * 1024; //当前请求上下文的HttpApplication实例 HttpContext context = ((HttpApplication)sender).Context; //判断请求的内容长度是否超过了设置的字节数 if (context.Request.ContentLength > maxRequestLength) { //得到服务对象 IServiceProvider provider = (IServiceProvider)context; HttpWorkerRequest workerRequest = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest)); //检查请求是否包含正文数据 if (workerRequest.HasEntityBody()) { //请求正文数据的长度 int requestLength = workerRequest.GetTotalEntityBodyLength(); //得到加载的初始字节数 int initialBytes = 0; if (workerRequest.GetPreloadedEntityBody() != null) initialBytes = workerRequest.GetPreloadedEntityBody().Length; //检查是否所有请求数据可用 if (!workerRequest.IsEntireEntityBodyIsPreloaded()) { byte[] buffer = new byte[512000]; //设置要接收的字节数为初始字节数 int receivedBytes = initialBytes; //读取数据,并把所有读取的字节数加起来,判断总的大小 while (requestLength - receivedBytes >= initialBytes) { //读取下一块字节 initialBytes = workerRequest.ReadEntityBody(buffer, buffer.Length); //更新接收到的字节数 receivedBytes += initialBytes; } initialBytes = workerRequest.ReadEntityBody(buffer, requestLength - receivedBytes); } } //请求重定向到上载页面,并给用户提示信息。 context.Response.Redirect(this.Request.Url.LocalPath + "?error=" + Server.UrlEncode("您上传的文件超过了允许的大小。")); } } </script>
最后,上传的页面设置如下:
ASPX 代码
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void Button1_Click(object sender, EventArgs e) { FileUpload1.SaveAs(Server.MapPath("~") + "\\" + System.IO.Path.GetFileName(FileUpload1.FileName)); err.Text = ""; } protected void Page_Load(object sender, EventArgs e) { if (!String.IsNullOrEmpty(Request.QueryString["error"])) { err.Text = Server.HtmlEncode(Request.QueryString["error"]); } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server" action="?"> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上载" /> <div><asp:Label ID="err" runat="server" ForeColor="Red"></asp:Label></div> </form> </body> </html>
相关文章推荐
- 在上传文件时限制上传文件的大小,并捕捉超过文件大小限制的异常
- 在上传文件时限制上传文件的大小,并捕捉超过文件大小限制的异常(转:孟子E章)
- 在上传文件时限制上传文件的大小,并捕捉超过文件大小限制的异常
- 捕捉asp.net上传超过文件大小限制的异常
- Struts2文件上传 超过大小限制无法跳转至指定input页面问题,浏览器提示连接已重置?根本原因
- Struts2 当上传的文件大小超过限制大小的时候,为什么没收到任何提示?
- Struts2 当上传的文件大小超过限制大小的时候,为什么没收到任何提示?
- springMVC文件上传大小超过限制的问题
- PHP上传文件超过了最大文件大小限制导致无法上传成功
- springMVC文件上传大小超过限制的问题
- 织梦Dede上传软件提示“你指定要上传的文件或文件大小超过限制”的解决办法
- springMVC上传文件大小限制以及超过限制后的自定义处理
- tomcat上传超过限制文件大小报异常而不能正常转发的bug
- springMVC上传文件大小限制以及超过限制后的自定义处理
- 详细描述PHP处理web上传文件的流程。如何限制上传文件的大小不能超过某个数值?
- 解决ASP.NET上传文件大小限制(超过大小限制,将不上传文件)补充:带进度条的大文件上传源程序
- javascript实现限制上传文件的大小
- PHP限制上传文件的大小(修改PHP.ini)
- spring mvc CommonsMultipartResolver文件上传maxUploadSize限制大小
- 限制ckeditor上传图片文件大小的方法