国产成人啪精品午夜在线观看_免费国产调教视频在线观看_国产免费爽爽视频免费可以看_1024手机看片国产_免费香蕉视频国产在线看_久久亚洲国产精品五月天婷_九九老司机在线视频精品_国产成人精品综合在线观看_96精品视频在线播放免费观看

IT技術

ASP.NET文件上傳大小的限制解決方案
作者:
來源: 本站
發(fā)布日期: 2017/7/27 15:37:07
點擊量: 6607次
【 字體:
背景顏色:

我們大家都知道ASP.NET為我們提供了文件上傳服務器控件FileUpload,默認情況下可上傳的最大文件為4M,如果要改變可上傳文件大小限制,那么我們可以在web.config中的httpRuntime元素中添加maxRequestLength屬性設置大小,同時為了支持大文件上傳超時可以添加executionTimeout屬性設置超時時間。網上有很多這樣的例子,但實際情況是否是這樣嗎?

 
<httpRuntime maxRequestLength="" executionTimeout=""/>
 
測試環(huán)境
 
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,增大可上傳文件的大小限制,增大執(zhí)行時間限制
 
<httpRuntime maxRequestLength="2048000" executionTimeout="600"/>
 
 重新選擇剛才4.3M的pdf文件,重新上傳

上傳成功
 
4. 上傳大于30M的的文件
 
 碰到這個問題的實際環(huán)境是我們使用了第三方的上傳文件組件,通過js調用第三方的ActiveX控件上傳文件,修改web.config后上傳大于30M的文件的時候,報了如下錯誤

查看windows系統(tǒng)日志,可以看到如下的日志錯誤,看到異常信息,我們可以猜測到是請求超長,但是我們設置了最大請求長度了啊,而且遠遠要大于30M。靜下來想一想可能是IIS限制的,查詢相關的IIS資料,發(fā)現果然是這樣。
 
異常消息: 超過了最大請求長度。
在 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請求的大小限制和執(zhí)行時間限制。同時其為上傳文件提供了基礎的框架,并為我們提供了UploadFile服務器控件,其最終也是通過Http將文件數據傳輸到服務器端,自然也受請求大小和執(zhí)行時間的限制,只是一般的請求都打不到這個極限,往往是上傳文件的時候才會觸及這個閥值。
 
2. IIS作為windows平臺上承載ASP.NET的法定服務器,按照正常邏輯來說,其也能統(tǒng)一設置發(fā)送到自己這里請求的大小限制。同時由于IIS只將針對特定類型的文件的請求路由到ASP.NET進行處理,像js、css和圖片等請求是不受ASP.NET中請求大小的限制的,這也從一個側面說明有必要再IIS中添加控制。
 
3. 請求的長度校驗只有先通過IIS的限制后,才有可能路由到ASP.NET,只有最終通過ASP.NET的長度限制校驗,才能正常的進行后續(xù)的管道處理步驟。
掃一掃在手機打開當前頁

Contact

聯系我們

告訴我們您想要的吧!我們?yōu)楫數乜蛻籼峁I(yè)、及時的服務
地址:云南省昆明市白云路368號
電話:400-871-8716 (工作時間:09:00-18:00(周一至周五))
何總:23592693
李總:53815112