close

最近在專案上遇到一個很老梗的問題
「為什麼檔案可以打網址變更檔名就可以下載!!你想要我鬧未來治國週記的笑話嗎!!」客戶問004_狂暴.gif
『(默).....』014_擦汗.gif

內部網站做久了,的確很容易忽略變更網址就可以下載檔案的問題。

先看一下需要的成果吧!
1.當滑鼠移到下載連結後,左下角的狀態列也不會出現相關網址。
2.需要能下載Word、Excel、PowerPoint、PDF四種類型的檔案

2009-7-26 上午 02-51-50.png 

 

接下來就是畫面設計!

因為剛好需要使用的樣式是超連結,所以我是透過LinkButton來達到這種效果~

既然是Button,當然就是寫他的Click事件囉~內容如下

2009-7-26 上午 02-56-25.png 

 

至於DownLoadFile這個Function,就是透過Response的效果將檔案輸出至頁面上

private void DownLoadFile(string parFilePath)
{
 //將虛擬路徑轉換成實體路徑
 string FilePath = Server.MapPath(parFilePath);

 if (FilePath.Split('\\').Length != 0)
 {
  string FileName = FilePath.Split('\\')[FilePath.Split('\\').Length - 1];

  //中文檔名作轉換
  FileName = HttpUtility.UrlEncode(FileName, Encoding.UTF8);

  FileStream fr = new FileStream(FilePath, FileMode.Open);
  Byte[] buf = new Byte[fr.Length];

  fr.Read(buf, 0, Convert.ToInt32(fr.Length));
  fr.Close();
  fr.Dispose();

  Response.Clear();
  Response.ClearHeaders();
  Response.Buffer = true;
  //轉換文字檔編碼格式用,但本次輸出無文字檔,故註解此段
  //Response.ContentEncoding = parEncoding;
  Response.AddHeader("content-disposition", "attachment; filename=" + FileName);

  Response.BinaryWrite(buf);
  Response.End();
 }
}

這樣就可以下載檔案了021_水草舞.gif 
2009-7-26 上午 03-02-53.png

 

附帶一提,這種作法的目錄須要授權ASPNET(Network Service)的帳戶「寫入」的權限才不會發生錯誤~
2009-7-26 上午 03-07-12.png 

不曉得還有沒有其他破綻了,如果要我硬猜的話,太大的檔案也許有可能有問題。
分享給開發人員參考囉~

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 gogo1119 的頭像
    gogo1119

    克里斯小圭的碎碎念

    gogo1119 發表在 痞客邦 留言(0) 人氣()