asp.net 上传文件限制

源自 http://blog.sina.com.cn/s/blog_7ae9d7b901014fgi.html

第一种方法,主要适用于IIS6.0版本

一、修改配置Web.Config文件中的httpRuntime节点
对于asp.net,默认只允许上传4M文件,增加如下配置,一般可以自定义最大文件大小.
一、修改配置Web.Config文件中的httpRuntime节点
对于asp.net,默认只允许上传4M文件,增加如下配置,一般可以自定义最大文件大小.

<httpRuntime

executionTimeout="800"

maxRequestLength="40960"

useFullyQualifiedRedirectUrl="false"/>

//executionTimeout预设(即默认)是 90 秒

//可以修改:executionTimeout = "180"

Asp.net支持的最大上传文件大小

在web.config中配置:

配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。

<configuration>
   <system.web>
      <httpRuntime>

<httpRuntime useFullyQualifiedRedirectUrl="true|false"
             maxRequestLength="size in kbytes"
             executionTimeout="seconds"
             minFreeThreads="number of threads"
             minFreeLocalRequestFreeThreads="number of threads"
             appRequestQueueLimit="number of requests"
             versionHeader="version string"/>
可选属性
属性 选项 说明

useFullyQualifiedRedirectUrl:指示客户端重定向是否是完全限定的(采用 {HYPERLINK "http://server/path" } 格式,这是某些移动控件所必需的),或者指示是否代之以将相对重定向发送到客户端。
    true 指定客户端重定向需要以完全限定的格式发送。这是通过自动将不是完全限定的格式的所有重定向转换为完全限定的格式来实现的。
    false 指定客户端重定向不需要被自动转换为完全限定格式。false 是默认选项。

maxRequestLength:指示 ASP.NET 支持的最大文件上载大小。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4 MB)。

executionTimeout:指示在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。

minFreeThreads:允许执行新请求的自由线程的最小数目。ASP.NET 为要求附加线程来完成其处理的请求使这些线程保持自由状态。

minFreeLocalRequestFreeThreads:ASP.NET 保持的允许执行新的本地请求的自由线程的最小数目。该线程数目是为从本地主机传入的请求而保留的,以防某些请求在其处理期间发出对本地主机的子请求。这避免了可能的因递归重新进入 Web 服务器而导致的死锁。

appRequestQueueLimit:ASP.NET 将为应用程序排队的请求的最大数目。当没有足够的自由线程来处理请求时,将对请求进行排队。当队列超出了该设置中指定的限制时,将通过“503 - 服务器太忙”错误信息拒绝传入的请求。

versionHeader:指定 ASP.NET 随每个响应所发送的版本头的值。Microsoft Visual Studio .NET 使用该属性来确定当前使用的 ASP.NET 版本。这对产品环境来说不是必需的,并且可以通过从 Web.config 或 Machine.config 移除该属性,或将该属性设置为空字符串 (versionHeader="") 来将其禁用。

示例
以下示例为 ASP.NET 应用程序指定 HTTP 运行时参数。

<configuration>
   <system.web>
      <httpRuntime maxRequestLength="4000"
         useFullyQualifiedRedirectUrl="true"
         executionTimeout="45"
         versionHeader="1.1.4128"/>
   </system.web>
</configuration>

二、如果还不行,可以使用思归提供的方案:

我们在上传大文件时都遇到过这样或那样的问题。设置很大的maxRequestLength值并不能完全解决问题,因为ASP.NET会block直到把整个文件载入内存后,再加以处理。实际上,如果文件很大的话,我们经常会见到Internet Explorer显示 "The page cannot be displayed - Cannot find server or DNS Error",好像是怎么也catch不了这个错误。为什么?因为这是个client side错误,server side端的Application_Error是处理不到的,可以参考这个帖子研究一下产生这个错误的机理。

handling server error when upload file too large

解决的方法是利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据

IServiceProvider provider = (IServiceProvider) HttpContext.Current;
HttpWorkerRequest wr = (HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest));
byte[] bs = wr.GetPreloadedEntityBody();
....
if (!wr.IsEntireEntityBodyIsPreloaded())
{
        int n = 1024;
        byte[] bs2 = new byte[n];
        while (wr.ReadEntityBody(bs2,n) >0)
       {
             .....
        }
}

三、IIS中上传大小的修改

1、首先要到进程中把IIS服务关了,即把inetinfo.exe进程关了,不然里面的文件不给你更改的哟~~~
    2、在系统目录中找到:windows/system32/inesrv/metabase.xml”文件,找个文本编辑器打开他,我都用EditPuls(这家伙不错,带字体色彩的),Ctrl+F 找到AspMaxRequestEntityAllowed="204800"这一项,这就是iis上传文件的默认大小了,默认为204800Byte,也就是200KB,将它改为你需要的大小就可以了!

第二种方式,主要是针对于iis7.0版本

1. 在用户自己的asp.net应用中修改web config文件,增加或修改以下红色背景内容即可

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="262144000"></requestLimits>
      </requestFiltering>
    </security>

2. 打开C:/Windows/System32/inetsrv/config/schema/IIS_schema.xml,找到如下内容:

程序代码

<element name="requestLimits">
   <attribute name="maxAllowedContentLength" type="uint" defaultValue="30000000" />
   <attribute name="maxUrl" type="uint" defaultValue="4096" />
   <attribute name="maxQueryString" type="uint" defaultValue="2048" />
   <element name="headerLimits">
     <collection addElement="add" clearElement="clear" removeElement="remove" >
       <attribute name="header" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" />
       <attribute name="sizeLimit" type="uint" required="true" />
     </collection>
   </element>
</element>

将红色部分修改成合适大小即可[1],单位为字节。

说明

[1].IIS_schema.xml默认是无法修改的,即使是系统管理员也无法修改,必需修改下权限,再去掉其只读属性才可修改。

上图为IIS_schema.xml默认权限,直接点击"编辑"按钮你会发现权限是不能修改的,还得先做如下操作:
1).点击"高级"按钮进入高级安全设置界面;
2).切换到"所有者"选项卡,点"编辑"按钮,选中Administrators后确定;

现在可以在"安全"选项卡上点击"编辑"按钮,给Administrators增加修改和写入权限了,再去掉IIS_schema.xml只读属性,系统管理员就可以修改文件了。

时间: 2024-10-11 11:10:49

asp.net 上传文件限制的相关文章

ASP.NET上传文件并记录到数据库

ASP.NET上传文件并记录到数据库 (2011-07-19 11:02:07) 转载▼ 标签: 杂谈 分类: asp.net学习 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebC

ASP.NET 上传文件以及点击下载

需求说明: 实际项目中,有必要上传附件(包括图片.文档.解压文件等)对数据库数据完善,这里实现的功能就是,上传附件到数据库,然后从数据读出来之后,可以"点击下载"之前上传的附件内容. asp.net代码如下: //用FileUpload控件,上传附件之后,导入数据库操作 protected void btnUp_Click(object sender, EventArgs e) { DbSql db = new DbSql(); //数据操作类 string fileName = &q

Asp.Net:上传文件

Asp.Net中很方便就能做个上传,例如做一个图片的上传: <asp:FileUpload ID="picUpload" runat="server" /> <asp:Button ID="btnUpload" runat="server" Text="上传" CssClass="btn" onclick="btnUpload_Click" Caus

朋友封装的一个ASP.NET上传文件的方法

自我感觉封装得还不错!!! 代码如下: C#代码   #region 上传文件的方法 /// <summary> /// 上传文件方法 /// </summary> /// <param name="myFileUpload">上传控件ID</param> /// <param name="allowExtensions">允许上传的扩展文件名类型,如:string[] allowExtensions = 

朋友封装的一个ASP.NET上传文件的方法(转)

#region 上传文件的方法 /// <summary> /// 上传文件方法 /// </summary> /// <param name="myFileUpload">上传控件ID</param> /// <param name="allowExtensions">允许上传的扩展文件名类型,如:string[] allowExtensions = { ".doc", ".

ASP.NET上传文件的几种方法

//上传文件实例 if (fileDealer.HasFile)//判断文件是否存在        {            string filepath = "";            try            {                string path = fileDealer.FileName;                string filename = path.Split('.')[0] + "_" + DateTime.Now

ASP.NET上传文件的三种基本方法

ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. Test.aspx关键代码: [html] view plain copy <form id="form1" runat="server"> <asp:FileUpload ID="FileUpload1" runat="server&quo

EXTJS+ASP.NET上传文件带实时进度条代码

一,文件夹 二,upLoad.cs是继承IHttpModule的类: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.IO; using System.Reflection; using System.Globalization; using System.Web.Hosting; /// <summary>

asp.net上传文件超过了最大请求长度[转]

错误消息:超过了最大请求长度 错误原因:asp.net默认最大上传文件大小为4M,运行超时时间为90S. 解决方案 1. 修改web.config文件可以改变这个默认值 <configuration> <system.web> <httpRuntime maxRequestLength="1048576" executionTimeout="3600" /> </system.web> <configuratio

asp.net上传文件

第一种:通过FTP来上传文件 首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了.代码如下: <%@ Page Language="C#" EnableViewState="false"%> <%@ Import Namespace="System.Net" %> <%@ Import Namespace="Syst