程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 解析:如何在 ASP.NET 中下載文件

解析:如何在 ASP.NET 中下載文件

編輯:關於.NET

這是筆者常被問到的一個問題,如何通過ASP.Net來下載文件,這個問題可大可小,我們先從小的開始。當我們要讓用戶下載一個文件,最簡單的方式是通過Response.Redirect指令:

  Response.Redirect("test.doc")

  您可以把上面這行指令放在Button的Click事件當中,當用戶點擊按鈕之後,網頁就會被轉址到該Word檔,造成下載的效果。

  但是這樣的下載有幾個問題:

  1. 無法下載不存在的文件:例如,我們若是想把程序動態(臨時)產生的文字,當作一個文件下載的時候(也就是該文件其實原先並不是真的存在,而是動態產生的),就無法下載。

  2. 無法下載存儲於數據庫中的文件:這是類似的問題,該文件並沒有真的存在,只是被存放在數據庫中的某個位置(某筆記錄中的某個欄位)的時候,就無法下載。

  3. 無法下載不存在於Web文件夾中的文件:文件確實存在,但該文件夾並不是可以分享出來的Web文件夾,例如,該文件的位置在C:\winnt,您總不會想要把該文件夾當作Web文件夾吧?這時候,由於您無法使用Redirect指向該位置,所以無法下載。

  4. 下載文件後,原本的頁面將會消失。

  典型的狀況是,我們要讓用戶下載一個.txt文件,或是.csv格式的Excel文件,但是...

  1. 這個文件可能是通過ASP.Net程序動態產生的,而不是確實存在於Server端的文件;

  2. 或是它雖然存在於伺服器端的某個實體位置,但我們並不想暴露這個位置(如果這個位置公開,很可能沒有權限的用戶也可以在網址欄上輸入URL直接取得!!!)

  3. 或是這個位置並不在網站虛擬路徑所在的文件夾中。(例如C:\Windows\System32...)

  這時候,我們就得采用不同的方式:

  Shared Function DownloadFile(ByVal WebForm As System.Web.UI.Page, ByVal FileNameWhenUserDownload As String, ByVal FileBody As String) 
  WebForm.Response.ClearHeaders() 
  WebForm.Response.Clear() 
  WebForm.Response.Expires = 0 
  WebForm.Response.Buffer = True 
  WebForm.Response.AddHeader("Accept-Language", "zh-tw") 
  '文件名稱 
  WebForm.Response.AddHeader("content-disposition", "attachment; filename=" & Chr(34) & System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8) & Chr(34)) 
  WebForm.Response.ContentType = "Application/octet-stream" 
  '文件內容 
  WebForm.Response.Write(FileBody) 
  WebForm.Response.End() 
  End Function

  上面這段代碼是下載一個動態產生的文本文件,若這個文件已經存在於服務器端的實體路徑,則可以通過下面的函數:

  Shared Sub DownloadFile(ByVal WebForm As System.Web.UI.Page, ByVal FileNameWhenUserDownload As String, ByVal FilePath As String) 
  WebForm.Response.ClearHeaders() 
  WebForm.Response.Clear() 
  WebForm.Response.Expires = 0 
  WebForm.Response.Buffer = True 
  WebForm.Response.AddHeader("Accept-Language", "zh-tw") 
  '文件名稱 
  WebForm.Response.AddHeader("content-disposition", "attachment; filename=" & Chr(34) & System.Web.HttpUtility.UrlEncode(FileNameWhenUserDownload, System.Text.Encoding.UTF8) & Chr(34)) 
  WebForm.Response.ContentType = "Application/octet-stream" 
  '文件內容 
  WebForm.Response.Write(System.IO.File.ReadAllBytes(FilePath)) 
  WebForm.Response.End() 
  End Sub

  上面這兩個下載文件的的函數,應可解決大多數開發人員在ASP.Net當中的文件下載問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved