<-- IE錯誤修正 --> 如何在ASP.NET中下載檔案 - RiS社群 | FileMaker 中小企業應用



快速發表主題
返回   RiS社群 | FileMaker 中小企業應用 > PHP / ASP.NET / HTML5 / jQuery > HTML5 = TAG + CSS3 + JavaScript APIs > ASP & ASP.NET

ASP & ASP.NET 從早期的ASP動態網頁到新一代的"大內(.NET)"高手,想進入微軟ASP.NET的核心與相關技術就來這交流。


FileMaker 教學 FileMaker 14 教學課程 FileMaker 教學
FileMaker 課程(僅接受公司/單位或1對1專屬教學

輕鬆學會FileMaker
帶你認識FileMaker

FileMaker俱樂部 加入FileMaker獲取官方資訊 FileMaker俱樂部
FileMaker俱樂部

回覆
 
LinkBack 主題工具 顯示模式
  #1 (permalink)  
舊 2007-12-18
Bing 的頭像
論壇管理員
 
註冊日期: 2007-08-21
住址: 台北, 桃園, 台中(豐原區)
文章: 5,366
酷 如何在ASP.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當中的檔案下載問題。


更多...

回覆時引用此篇文章
回覆
LinkBacks (?)
LinkBack to this Thread: http://forum.j2eemx.com/forum25/thread1215.html
作者 For Type 日期
簡單訊息通知 - killysss- 點部落 This thread Refback 2010-02-09 03:47 PM
asp.net下載檔案 in chongbing @ SiteTag This thread Refback 2009-01-21 01:10 PM


主題工具
顯示模式

發表文章規則
不允許您發表新主題
不允許您發表文章
不允許您上傳附件
不允許您編輯自已的文章

開啟 BB 代碼
關閉 HTML 程式碼
Trackbacks are 關閉
Pingbacks are 關閉
Refbacks are 開啟



所有時間均為 +9。現在的時間是 09:55 AM
Powered by vBulletin® 版本 3.7.2
版權所有 ©2000 - 2017,Jelsoft Enterprises Ltd.
Advertisement System V2.6 By   Branden
RiS 社群 ( 感謝正洋資訊顧問有限公司技術指導 ) - 使用3.7.2永久合法版權。
Ad Management by RedTyger



Content Relevant URLs by vBSEO 3.6.0 PL2