你覺得的ASP.NET文件上傳大小限制是你覺得的嗎

咱們覺得的文件大小限制

咱們你們都知道ASP.NET爲咱們提供了文件上傳服務器控件FileUpload,默認狀況下可上傳的最大文件爲4M,若是要改變可上傳文件大小限制,那麼咱們能夠在web.config中的httpRuntime元素中添加maxRequestLength屬性設置大小,同時爲了支持大文件上傳超時能夠添加executionTimeout屬性設置超時時間。網上有不少這樣的例子,但實際狀況是不是這樣嗎?css

<httpRuntime maxRequestLength="" executionTimeout=""/>

 

測試環境

IIS 7.五、.NET 3.5 sp1html

測試頁面UploadFile.aspxweb

<%@ 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.cswindows

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文件ui

 

 

         上傳後報黃頁spa

 

       3. 修改web.config文件,設置可上傳文件大小限制3d

          修改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的長度限制校驗,才能正常的進行後續的管道處理步驟。

相關文章
相關標籤/搜索