zoukankan      html  css  js  c++  java
  • asp.net文件/大文件上传需要配置的项目整理

    asp.net程序默认上传文件是有大小限制的,默认是4M。IIS7下默认是30M。因此需要配置几个项目进行支持大文件(最大2G)的上传。

    1、配置错误 

      说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 

     分析器错误消息: 属性“maxRequestLength”的值无效。错误为: 该值必须在 0-2097151 范围内。

    如果出现以下错误:

      说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

     异常详细信息: System.Web.HttpException: 超过了最大请求长度。

    那是因为配置的maxRequestLength超过了2097151。

    解决办法1:

    Web.config 配置:

    <configuration><system.web><httpRuntime maxRequestLength="4096" executionTimeout="3600" /></system.web><configuration>

    注意修改超时时间:executionTimeout.单位是:秒。


    解决办法2:修改Global.asax.cs的Application_BeginRequest方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Using System.Web.Configuration;
    void Application_BeginRequest(object sender, EventArgs e)
            {
                //本代码的功能是检查页面请求的大小,如果超过了配置文件maxRequestLength的设定值,就提示用户超过了所允许的文件大小。
                //从配置文件里得到配置的允许上传的文件大小
                HttpRuntimeSection runTime = (HttpRuntimeSection)WebConfigurationManager.GetSection("system.web/httpRuntime");
                //maxRequestLength 为整个页面的大小,不仅仅是上传文件的大小,所以扣除 100KB 的大小,
                //maxRequestLength单位为KB
                int maxRequestLength = (runTime.MaxRequestLength) * 1024;
                //当前请求上下文的HttpApplication实例
                //HttpContext context = ((HttpApplication)sender).Context;
                //判断请求的内容长度是否超过了设置的字节数
                if (Request.ContentLength > maxRequestLength)
                {
                    #region 不理解这些代码存在的意义
                    /*
                    //得到服务对象
                    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);
                        }
                    }
                    */
                    #endregion
                    //注意这里可以跳转,可以直接终止;在VS里调试时候得不到想要的结果,通过IIS才能得到想要的结果;FW4.0经典或集成都没问题
                    htm = htm&("请求大小" + Request.ContentLength);
                    Response.End();
                }
            }

    2、问题:HTTP 错误 404.13 - Not Found

    HTTP 错误 404.13 - Not Found

    请求筛选模块被配置为拒绝超过请求内容长度的请求。

    最可能的原因:

    •Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值。

    可尝试的操作:

    •确认 applicationhost.config 或 web.config 文件中的 configuration/system.webServer/security/requestFiltering/requestLimits@maxAllowedContentLength 设置。

    详细错误信息:

    模块

       RequestFilteringModule 

    通知

       BeginRequest 

    处理程序

       PageHandlerFactory-Integrated 

    错误代码

       0x00000000 

    原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大小时30M)。

    解决:更改asp.net文件上传大小限制

    修改IIS的applicationhost.config

      文件位置: %windir%/system32/inetsrv/config/applicationhost.config

      找到<requestFiltering>节点,该节点下默认没有 <requestLimits maxAllowedContentLength="上传大小的值(单位:byte)" /> 元素。为这个节点添加如下元素:<requestLimits maxAllowedContentLength="2147483647" />  (上传的大小将改为2G)

     web.config中,添加如下内容

    <configuration>
     <system.web>
    <httpRuntime maxRequestLength="2097151" executionTimeout="120"/>
     </system.web>
    </configuration>

        说明:

      httpRuntime  配置 ASP.NET HTTP 运行时设置,以确定如何处理对 ASP.NET 应用程序的请求。

          maxRequestLength (指示 ASP.NET 支持的最大文件上载大小)

        指定输入流缓冲阈值限制(以 KB 为单位)。此限制可用于防止拒绝服务攻击;例如,因用户向服务器发送大型文件而导致的拒绝服务攻击。

        默认值为 4096 (4 MB),最大值只能是2097151K。
           executionTimeout

        指定在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。默认90秒。

        只有当 compilation 元素中的调试属性为 False 时,此超时属性才适用。若要帮助避免在调试期间关闭应用程序,请不要将此超时属性设置为较大值。

    web.config中,把以下内容加在<system.webServer>节点

    <security>
      <requestFiltering >
        <requestLimits maxAllowedContentLength="2147483647" ></requestLimits>
      </requestFiltering>
    </security>

        上述中maxAllowedContentLengt是以BK为单位。

  • 相关阅读:
    IT战略规划项目方法论(转)
    008_Node中的require和import
    007_Mac上安装Node和NPM
    005_讨论多线程和单线程
    006_饿了么大前端总监sofish帮你理清前端工程师及大前端团队的成长问题!
    005_解密饿了么大前端团队
    005_python对整数的拼接
    010_动态语言与鸭子类型及python2和3的区别
    010_vim和python整合开发
    009_一行python重要工具
  • 原文地址:https://www.cnblogs.com/xiaodongaini/p/5018605.html
Copyright © 2011-2022 走看看