zt對於C#中的FileUpload解決文件上傳大小限制的問題設置


對於C#中的FileUpload解決文件上傳大小限制的問題設置

     

您可能沒意識到,但對於可以使用該技術上載的文件的大小存在限制。默認情況下,使用 FileUpload 控件上載到服務器的文件最大為 4MB 左右。不能上載超過該限制的任何內容。

然 而,關於 .NET 的重要一點是,它通常會提供一種規避限制的方法。您通常可以更改正在使用的默認設置。要更改大小限制,可以在 web.config.comments 文件(可以在 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 的 ASP.NET 2.0 配置文件夾中找到)或應用程序的 web.config 文件中進行一些改動。

在 web.config.comments 文件中,查找一個名為 <executionTimeout>的節點,如下所示:

<httpRuntime executionTimeout="110" maxRequestLength="4096" requestLengthDiskThreshold="80" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="5000" enableKernelOutputCache="true" enableVersionHeader="true" requireRootedSaveASPath="true" enable="true" shutdownTimeout="90" delayNotificationTimeout="5" waitChangeNotification="0" maxWaitChangeNotification="0" enableHeaderChecking="true" sendCacheControlHeader="true" apartmentThreading="false" />

在這個節點上進行了許多操作,但負責上載文件大小的設置是 maxRequestLength 屬性。默認情況下,該屬性設置為 4096 千字節 (KB)。只需更改此值,就可以增加可上載到服務器的文件大小。如果想要允許將 10 兆字節 (MB) 的文件上載到服務器,則將 maxRequestLength 值設置為 11264,這意味着該應用程序允許將最大為 11000 KB 的文件上載到服務器。

在 web.config.comments 文件中進行此改動會將該設置應用於服務器上的所有應用程序。如果要將該設置僅應用於正在使用的應用程序,則將該節點應用於應用程序的 web.config 文件,覆蓋 web.config.comments 文件中的所有設置。請確保該節點位於配置文件中的 <system.web> 節點之間。

與上載文件大小限制有關的另一個設置是賦給 <httpRuntime> 節點中 executionTimeout 屬性的值。

賦給 executionTimeout 屬性的值是 ASP.NET 關閉前允許發生的上載秒數。如果要允許將更大的文件上載到服務器,則還要增加該值和 maxRequestLength 值。

增加可上載文件大小的一個缺點是,存在通過發出大量請求來攻擊服務器的黑客。要避免這種情況,可以減小允許上載的文件大小;否則,可能會發現數百個甚至上千個 10 MB 的請求訪問您的服務器。

客戶端驗證允許上載的文件類型

有幾種方法可以用來控制上載到服務器的文件類型。遺憾的是,沒有一種十全十美的方法可以防御其他人上載惡意的文件。然而,您可以采取一些步驟,以使這個允許最終用戶上載文件的過程更易於管理。

一個可用的好方法是使用 ASP.NET 免費提供的 ASP.NET 驗證控件。這些控件使您可以對正在上載的文件進行正則表達式檢查,看看文件的擴展名是否在允許上載的擴展名之列。

因為該方法強制在客戶端進行檢查,所以對於允許在客戶端使用驗證控件的瀏覽器而言,這是一個理想的選擇;如果簽名不是您允許的簽名,則該文件不能上載到服務器。清單 3 顯示一個使用驗證控件完成該任務的示例。

此處不介紹驗證控件的用法。有關驗證控件的完整解釋以及如何在 ASP.NET 頁中使用它們,請參閱 Validating ASP.NET Server Controls

清單 3. 使用驗證控件限制上載到服務器的文件類型

<ASP:FileUpload ID="FileUpload1" runat="server" /><br /><br /><ASP:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Upload File" /> <br /><br /><ASP:Label ID="Label1" runat="server"></ASP:Label><ASP:RegularExpressionValidator id="RegularExpressionValidator1" runat="server" ErrorMessage="Only mp3, m3u or mpeg files are allowed!" ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))     +(.mp3|.MP3|.mpeg|.MPEG|.m3u|.M3U)$" ControlToValidate="FileUpload1"></ASP:RegularExpressionValidator><br /><ASP:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" ErrorMessage="This is a required field!" ControlToValidate="FileUpload1"></ASP:RequiredFieldValidator>

這個簡單的 ASP.NET 頁使用驗證控件,這樣最終用戶就只能將 .mp3、.mpeg 或 .m3u 文件上載到服務器。如果文件類型不是以上可選的文件類型,則 Validation 控件向屏幕拋出一個異常。如圖 4 所示。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM