自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET大文件上傳方法淺析

開發(fā) 后端
本文向您介紹ASP.NET的大文件上傳方法,作者分析了ASP.NET文件上傳的一些原理,并給出編寫ASP.NET的大文件上傳程序的一些建議,最后,介紹了一些收費組件和建議。

使用過ASP.NET的開發(fā)者都知道,F(xiàn)ileUpload控件是一把雙刃劍——既可能成為我們的救世主,也能變成我們的敵人。其中一個很常見的問題就是如何處理超過4MB的大文件上傳。

微軟的ASP.NET MVP Jon Galloway最近發(fā)表了一篇文章,其中討論了FileUpload控件的種種使用技巧。了解了這些之后,我們即可在理論上處理任何大小的文件上傳。

允許ASP.NET大文件上傳

Jon提到,使用FileUpload控件進行文件上傳是一件非常有技巧性的事情。開發(fā)者應(yīng)該了解的是,之所以默認的文件大小上限為4MB,并不是因為當(dāng)時的設(shè)計人員靈光一現(xiàn),而是為了避免潛在DOS攻擊危險。

若是攻擊者提交了一個或多個大文件,往往會讓服務(wù)器不堪重負。若是用戶上傳的文件大于4MB,將會得到“Maximum request length exceeded.”異常信息。

想增加這個尺寸的上限并沒有什么難度,不過開發(fā)者需要知道怎樣做才是最好的方法。默認的4MB設(shè)定于系統(tǒng)的machine.config文件中,不過我們在web.config中即可覆蓋該值。

例如,若想將上傳文件的上限提高至20MB,我們只需要這樣修改:

  1. <system.web>  <httpRuntime executionTimeout="240" maxRequestLength="20480" /></system.web> 

若是在machine.config中對該值進行了修改,那么同時受到影響的就不只是這一個網(wǎng)站。ASP.NET之所以設(shè)計了這樣的上限,就是為了避免潛 在的攻擊。所以最好的方式是在某個特定目錄中進行覆蓋,而不是整個應(yīng)用程序。web.config文件的格式非常靈活,因此實現(xiàn)這樣的需求也不難:

web.config文件允許級聯(lián)覆蓋,所以很容易就能夠?qū)崿F(xiàn)這個要求。我們可以在某個文件夾中添加web.config文件,并書寫上述配置,或者干脆在web.config文件中添加一個專門的<location />標(biāo)簽,也能達到同樣的效果:

  1. <location path="Upload">    <system.web>        <httpRuntime executionTimeout="110" maxRequestLength="20000" /> 
       
    </system.web></location> 

對于允許ASP.NET大文件上傳來說,改變默認的上傳文件大小限制僅僅是我們要做的第一步。

若是ASP.NET大文件上傳的話,往往會出現(xiàn)一些很有意思的情況。無論maxRequestLength 在中設(shè)置成什么,IIS都會不假思索地接受,但隨后在ASP.NET檢查時就會拋出異常。

當(dāng)然很容易就可以捕獲到這個異常,不過這并不是我們所期待的。還有一種方法是覆寫Page.OnError方法,并通過檢查在發(fā)生HttpException異常時HTTP響應(yīng)代碼是否為400來判斷,不過這也不夠完美。

給用戶充分提示

一個讓用戶很反感的做法就是誤導(dǎo)用戶,而且在Web應(yīng)用程序執(zhí)行操作時也不給用戶任何提示。文件尺寸的限制寫在web.config中,所以將一段提示文字放在web.config中也就變成了件非常自然的事。

最好的做法就是在運行時讀取web.config中的httpRuntime節(jié),并轉(zhuǎn)化為HttpRuntimeSection對象。

更好的解決方案

還有一些商用的解決方案供我們選擇。這些解決方案通過HttpHandler實現(xiàn),在通過進度條給用戶充分提示的同時,也讓我們開發(fā)人員能夠更好地控制文件大小以及上傳過程中可能出現(xiàn)的異常。

下面是一些常見的ASP.NET大文件上傳組件:

◆FileUploader.NET (MediaChase公司,$310以上)

◆RadUpload (Telerik公司,$249)

◆NeatUpload (免費,遵守LGPL協(xié)議)

文章建議,最好的解決方案是使用RIA,例如那些用ASP.NET和Silverlight編寫的上傳組件。

大多數(shù)情況下,我建議用給予Silverlight或Flash的上傳組件來替代傳統(tǒng)的FileUpload組件。這類組件不單單提供了更好的上傳體驗,也通常會比<input type="file">在頁面上生成的文本框和按鈕要漂亮一些。這個<input type="file">并不能夠通過CSS添加樣式,雖然總是有人嘗試去尋找一些方法。

雖然目前并沒有什么商業(yè)上傳組件使用了Silverlight,不過我們可以找到一個示例程序演示了用Silverlight進行多文件上傳的方法。

哪怕是如同文件上傳一般微不足道的問題,我們都能夠找到很多種不同的方法來解決。而最大的挑戰(zhàn)在于分析各種不同做法的利弊,以及衡量用各個做法解決這個問題所要花費的時間和金錢。只有仔細分析計劃之后,我們才能夠找到最適合項目中使用的方法。

 

【編輯推薦】

  1. ASP.NET緩存使用中的幾點建議
  2. ASP.NET中的ViewState本質(zhì)
  3. 詳解四個ASP.NET狀態(tài)
  4. 安裝ASP.NET AJAX的過程
  5. 介紹ASP.NET MVC框架
責(zé)任編輯:佚名 來源: InfoQ
相關(guān)推薦

2009-07-21 15:38:31

2009-07-21 16:05:58

ASP.NET大文件上

2009-10-30 14:03:59

ASP.NET上傳文件

2010-02-05 08:32:32

ASP.NET MVC

2009-08-04 17:28:45

Apache支持ASP

2009-07-23 10:37:43

2009-07-24 13:41:15

ASP.NET AJA

2009-08-05 18:36:12

ASP.NET Che

2009-07-31 12:43:59

ASP.NET MVC

2009-08-05 15:50:13

ASP.NET優(yōu)點

2009-07-24 10:53:51

ASP.NET實現(xiàn)靜態(tài)

2009-07-31 11:45:42

ASP.NET文件下載

2009-07-21 10:05:10

ASP.NET配置文件

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設(shè)計

2009-07-29 10:02:49

ASP.NET上傳

2009-07-27 09:29:38

ASP.NET中Jav

2009-07-27 17:32:39

Web ServiceASP.NET

2009-07-21 13:01:07

ASP.NET上傳文件

2009-07-24 15:07:56

ASP.NET上傳文件

2009-08-04 17:16:16

ASP.NET代碼優(yōu)化
點贊
收藏

51CTO技術(shù)棧公眾號