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屬性設為真,系統將主動與客
戶端中斷連線,中斷上傳過程,同時頁面提交的其它資料也將取消。