你以为的ASP.NET文件上传大小限制是你以为的吗

简介: 原文:你以为的ASP.NET文件上传大小限制是你以为的吗我们以为的文件大小限制 我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.config中的httpRuntime元素中添加maxRequestLength属性设置大小,同时为了支持大文件上传超时可以添加executionTimeout属性设置超时时间。
原文: 你以为的ASP.NET文件上传大小限制是你以为的吗

我们以为的文件大小限制

我们大家都知道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));

        }

    }

 

}

 

 

实际测试

  1. 上传小于4M的文件

          选择2.7M的pdf文件上传

 

 

           上传提示成功

 

      2. 上传大于4M的文件

          选择上传4.3M的pdf文件

 

 

         上传后报黄页

 

       3. 修改web.config文件,设置可上传文件大小限制

          修改web.config,增大可上传文件的大小限制,增大执行时间限制

         

<httpRuntime 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的长度限制校验,才能正常的进行后续的管道处理步骤。

目录
相关文章
|
2月前
|
开发框架 前端开发 .NET
ASP.NET WEB——项目创建与文件上传操作
ASP.NET WEB——项目创建与文件上传操作
46 0
|
3月前
|
开发框架 JSON JavaScript
ASP.NET Core3.1实战教程---基于Jquery单文件上传
ASP.NET Core3.1实战教程---基于Jquery单文件上传
26 0
|
4月前
|
开发框架 .NET
Asp.Net文件上传
Asp.Net文件上传
24 0
|
9月前
|
存储 开发框架 前端开发
ASP.NET Core MVC 从入门到精通之文件上传
ASP.NET Core MVC 从入门到精通之文件上传
127 0
|
12月前
|
开发框架 JavaScript 前端开发
Vue.js 3.0搭配.NET Core写一个文件上传组件
Vue.js 3.0搭配.NET Core写一个文件上传组件
171 0
|
运维 Java jenkins
文件上传时提示NET:ERR_CONNECTION_RESET
最近闲暇之余写了一个半自动化的项目部署的项目,因为发现之前使用的jenkins太消耗服务器资源了,由于现在又不想升级服务器,就自己写一个半自动化的。其实就是一些java执行我在服务器上面写好的.sh的脚本即可,或者执行一些linux命令
3432 0
文件上传时提示NET:ERR_CONNECTION_RESET
|
开发框架 JavaScript 前端开发
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
433 0
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
|
开发框架 前端开发 .NET
ASP.NET MVC (三、表单与文件上传)(3)
ASP.NET MVC (三、表单与文件上传)(3)
101 0
ASP.NET MVC (三、表单与文件上传)(3)
|
开发框架 前端开发 .NET
ASP.NET MVC (三、表单与文件上传)(2)
ASP.NET MVC (三、表单与文件上传)(2)
56 0
ASP.NET MVC (三、表单与文件上传)(2)
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0