Asp.NET大檔案上傳組件開發總結

來源:互聯網
上載者:User

 Asp.NET大檔案上傳組件開發總結(六)---大檔案上傳組件使用說明
 
1編寫目的
為了方便使用者使用大檔案上傳組件,特寫使用說明書,以指明調用組件的介面,操作流程和注意事項。

2背景
由於ASP.NET在上傳檔案時,是全部裝入伺服器記憶體,在上傳檔案時,消耗伺服器資源較多,且不能提供上傳進度顯示,由於消耗服

務器資源較多,所以ASP.NET上傳檔案時往往大小受到限制。此組件解決了所有這些問題

3定義
大檔案:大檔案主要意思是指大小不受限制,

Web.config:是ASP.NET的設定檔。

4功能
所有需要用ASP.NET上傳檔案的地方,均可以使用本組件。本組件可以解除ASP.NET對上傳檔案大小的限制,同時提供上傳進度提示,

使用者還可以選擇中斷上傳過程。減少對伺服器資源的消耗(經測試,伺服器資源消耗與運行普通ASP.NET頁面相差無幾)

5、組件主要類及操作:
5.1 BigFileUploadModuleHandle
大檔案上傳處理模組,用於在用戶端請求發送到伺服器上後,分析請求內容,如果是上傳檔案,則在IIS將資料出發送到ASP.NET的管

道中時,讀取資料,寫入檔案,並重新組織請求內容,重新組織的內容是去掉了檔案內容的請求內容。頁面在接收到請求後,除檔案

上傳控制項不能讀取檔案內容外,其它組件的屬性可以正常訪問。

5.2 DataReader
請求資料分析和檔案寫入。

5.3 UpFileInfo
上傳檔案屬性結構,供組件內部使用。

5.4 UploadContext
檔案上傳環境,組件在使用時,主要使用此類。具體有以下方法和屬性:

UploadContext:建構函式,需傳入檔案上傳頁面對象和檔案臨時存放目錄。外部不能直接調用些建構函式,要構建檔案上傳環境,

需調用UploadContextFactory的提供的靜態方法

TmepFileDir:擷取和設定上傳臨時檔案存放路徑

FileNames上傳的檔案名稱列表

TotalLength發送資訊總長度,包括頁面所有控制項請求內容

Readedlength已接收的資訊長度 包括面頁控制項請求內容

StartReadDateTime開始接收時間   

FileConIds分頁檔上傳控制項ID列表,對檔案上傳控制項在伺服器端運行時,為控制項的UniqueID

GUID:上傳檔案唯一標誌

Abort :設定和讀取是否中斷上傳過程

Ratio上傳速率,返回每秒上傳的位元組數

FormatRatio擷取格式化的上傳速度,以適當的位元組,K位元組,M位元組表示

LeftTime估計上傳剩餘時間,以秒為單位

FormatLeftTime擷取格式上的上傳剩餘時間,適當的以小時,分鐘,秒錶示

CurrentFile當前正在處理的上傳檔案

Status上傳狀態

FormatStatus 以字串格式,返回當前上傳操作的狀態

SaveFile另存上傳的資料檔案,此方法主要將檔案從臨時存放目錄移到使用者需要求的目錄,由於採取移動檔案辦法,所以此方法調用

成功後,臨時檔案對應檔案將被移走。

GetFileNameByControl根據分頁檔上傳控制項名稱,擷取上傳的檔案名稱

Dispose當前上下文環境中接收的所有檔案

GetFileName :根據檔案上傳控制項名稱,擷取對應的上傳的檔案。

5.5 UploadContextFactory
建立和擷取檔案上傳環境。

InitUploadContext(System.Web.UI.Page page,string TempFileDir)根據頁面對象和上傳檔案臨時目錄檔案夾,擷取一個檔案上傳

上下文類執行個體

GetUploadContext根據頁面發送的上傳會話編號,擷取檔案上傳上下文

GetUploadContext(string GUID)根據會話編號的GUID擷取檔案上傳的上下文

Release在頁面邏輯處理完成後,釋放上傳上下文,並刪除臨時檔案

uploadStatus:檔案上傳狀態枚舉類

6 使用方法及注意事項
1、 將組件dll複製到應用系統bin目錄,然後再VS.NET中引用本組件,

2、 在web.config增加ASP.NET處理模組

<httpModules>

<add name="BigFileUploadModuleHandle " type="HelpSoft.BigFileUploadModuleHandle,BigFileUploadHandle" />

</httpModules>

3、 在要上傳檔案的asp.net頁面的頁面裝入事件中或初始化事件中,初始設定檔案上傳環境,註冊檔案上傳存放的臨時檔案夾,如下

面代碼:

private void Page_Load(object sender, System.EventArgs e)

{

       UploadContext context = UploadContextFactory.InitUploadContext(this, @"c:" myupload"");

}

提示:A、檔案存放目錄要求設定相應的存取權限,目錄必須存在

      B、初始化上傳環境後,頁面須在一天內傳送檔案。否則上傳環境失效。

      C、初始化上傳環境時,組件將在頁面內註冊隱藏欄位,記錄上傳會話唯一標誌。隱藏欄位命名為UploadID,頁面不能有同名控制項。

        D、需要上傳檔案表單編碼方式必須為multipart/form-data,(對於檔案上傳控制項作為伺服器端控制項運行時,系統會自動加

入此編碼方式,否則需使用者手工添加)

        E、要使本上傳組件生效,必須在頁面訪問時初始化上傳環境,和設定表單編碼方式,反之,如不希望本組件對特定頁面生

效,只可取消前兩條件之一。

4、 在檔案上傳提交事件中,直接從上傳檔案環境工廠類中擷取檔案上傳環境,進一步擷取上傳的檔案資訊。類似代碼如下:

UploadContext context = UploadContextFactory.GetUploadContext();

string FileName = context.GetFileNameByControl(resFile.UniqueID);

string filePath=@"c:"workdir";           

if (context.SaveFile(resFile.UniqueID,filePath+FileName))

{

       UploadContextFactory.Release();

}

提示:A、根據控制項名擷取對應的上傳檔案資訊時,對伺服器控制項需要傳入控制項唯一標誌,對非伺服器控制項,需傳入控制項名稱。

       B、對檔案另存時的目錄存取權限,是否存在、可用空間大小,由頁面調用者檢查處理。如此類型錯誤發生,系統將引發對應

異常。

C、如沒找到控制項對應檔案(可能是用戶端沒有指定檔案或傳的控制項標誌有誤)、臨時目錄中對應檔案也不存在(已成功調用過此方

法,檔案已被移走),本方法將返回假,操作成功後,方法返回真。

D、UploadContextFactory.Release()將從系統緩衝中清除上傳環境對象,將不能用GetUploadContext方法擷取上傳環境,但已取得

的上傳環境仍然可用。

5、 讀取檔案上傳進度時,需另建一個ASPX頁面,讀取進度主要是根據上傳檔案的會話唯一標誌,從系統緩衝中(通過

GetUploadContext(string GUID)方法))擷取上傳檔案環境,訪問此環境類,即可以擷取檔案上傳開始時間、資訊總長度、當前已

傳送資訊長度、速度、估計剩餘時間等資訊。系統再使用定時重新整理的辦法,不斷獲得上傳進度資訊,即可形成上傳進度提示。

進度顯示可以使用XML無回重新整理方式,也可以使用頁面定時重新整理方式。

6、 要在傳輸過程中,中斷傳輸入過程,只需用會話唯一標誌,擷取上傳環境,將一上傳環境的abort屬性設為真,系統將主動與客

戶端中斷連線,中斷上傳過程,同時頁面提交的其它資料也將取消。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.