作  者:許嘉仁 精誠資訊 恆逸教育訓練中心資深講師
技術分類:程式設計
 
審核檔案下載需求

一般網站提供使用者下載壓縮檔*.Zip,都是直接在網頁提供超連結直接下載。但是許多網站有一些需求,例如:1,我想知道這個檔案被下載過幾次。2,我想控管這個檔案某些人才能下載,甚至想做資料分析,記錄使用者在網站上下載過哪些檔案。3,檔案不希望放在網站伺服器上,可能統一放在某個目錄或檔案伺服器上統一管理。這些功能都必須加入程式,不能只是放個超連結就能搞定的。

如果各位有下載過MSN Messenger,他的下載畫面如下圖:

圖中有個下載按鈕,而且網頁上也有欲下載的版本可供挑選,我們現在要做的就是這顆下載按鈕所做的事。想要做到類似的功能,首先寫一段提供使用者下載檔案的審核程式:
 private void GetFileToDownload(string strFileName)
 {
  // 可指定欲下載的檔案所放置的目錄
  string fullpath = @"c:\Temp\" + strFileName;

  if (File.Exists(fullpath))
  {
     FileInfo fi = new FileInfo(fullpath);
     string filename = strFileName;

     // 可以連結資料庫記錄被下載次數
     // 也可審核是否允許下載
     Response.Clear();
     Response.ContentType = "application/zip";
     Response.AppendHeader("Content-Length", fi.Length.ToString());
     Response.AddHeader("content-disposition", "attachment; filename=\"" + filename + "\"");
     Response.WriteFile(fullpath);
     Response.End();
    }

    Response.Write("<h1>No File Found!</h1>");
    Response.End();
 }

程式中可以根據自己的需求決定被下載的檔案所存放的目錄,也可以加入企業邏輯,不管是審核或記錄都可以在程式中撰寫。
 
下載按鈕的程式
接下來下載按鈕被點選之後,加入下列程式即可:

    try
   {
      GetFileToDownload("lotto.zip");
   }
   catch
   {
      Response.Write("Oops...contact the admin!");
   }

有了這樣的程式,也可以擴展至其他的檔案類型,例如*.JPG或*.BMP等等,但是要先知道何謂Response的ContentType,有興趣的讀者可以查查看,然後使用相同的程式也能做到一樣的功能喔。

 
您可在課程中了解更多的ASP.NET…
相關學習資源︰