zoukankan      html  css  js  c++  java
  • 解决ASP.NET上传文件大小限制

    第一种方法,主要适用于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只读属性,系统管理员就可以修改文件了。

    在网上各种博客中搜集到的,是比较有效的方法。
  • 相关阅读:
    写的一个split函数
    从头開始写项目Makefile(十):make内嵌函数及make命令显示
    MySQL 中文乱码解决
    查看DNS主机名解析的主机IP并向DNSserver进行DNS域名解析
    【iOS开发-90】CALayer图层:自己定义图层,图层的一些动画
    iconv 中文截断问题的解决方法
    linux有用技巧:使用ntfs-3g挂载ntfs设备
    SQL Sever——远程过程调用失败(0x800706be)
    USACO ariprog 暴力枚举+剪枝
    Shell编程(脚本)的经常使用命令和语句
  • 原文地址:https://www.cnblogs.com/zhangxiaozhong/p/3191475.html
Copyright © 2011-2022 走看看