在ASP.NET中下載文件的實(shí)現(xiàn)代碼
更新時(shí)間:2012年02月14日 22:28:17 作者:
通過ASP.NET來下載文件,這個(gè)問題可大可小,我們先從小的開始。當(dāng)我們要讓用戶下載一個(gè)文件
這是筆者常被問到的一個(gè)問題,如何通過ASP.NET來下載文件,這個(gè)問題可大可小,我們先從小的開始。當(dāng)我們要讓用戶下載一個(gè)文件,最簡(jiǎn)單的方式是通過Response.Redirect指令:
Response.Redirect("test.doc")
您可以把上面這行指令放在Button的Click事件當(dāng)中,當(dāng)用戶點(diǎn)擊按鈕之后,網(wǎng)頁就會(huì)被轉(zhuǎn)址到該word檔,造成下載的效果。
但是這樣的下載有幾個(gè)問題:
1. 無法下載不存在的文件:例如,我們?nèi)羰窍氚殉绦騽?dòng)態(tài)(臨時(shí))產(chǎn)生的文字,當(dāng)作一個(gè)文件下載的時(shí)候(也就是該文件其實(shí)原先并不是真的存在,而是動(dòng)態(tài)產(chǎn)生的),就無法下載。
2. 無法下載存儲(chǔ)于數(shù)據(jù)庫中的文件:這是類似的問題,該文件并沒有真的存在,只是被存放在數(shù)據(jù)庫中的某個(gè)位置(某筆記錄中的某個(gè)欄位)的時(shí)候,就無法下載。
3. 無法下載不存在于Web文件夾中的文件:文件確實(shí)存在,但該文件夾并不是可以分享出來的Web文件夾,例如,該文件的位置在C:/winnt,您總不會(huì)想要把該文件夾當(dāng)作Web文件夾吧?這時(shí)候,由于您無法使用Redirect指向該位置,所以無法下載。
4. 下載文件后,原本的頁面將會(huì)消失。
典型的狀況是,我們要讓用戶下載一個(gè).txt文件,或是.csv格式的Excel文件,但是...
1. 這個(gè)文件可能是通過ASP.NET程序動(dòng)態(tài)產(chǎn)生的,而不是確實(shí)存在于Server端的文件;
2. 或是它雖然存在于伺服器端的某個(gè)實(shí)體位置,但我們并不想暴露這個(gè)位置(如果這個(gè)位置公開,很可能沒有權(quán)限的用戶也可以在網(wǎng)址欄上輸入U(xiǎn)RL直接取得!!!)
3. 或是這個(gè)位置并不在網(wǎng)站虛擬路徑所在的文件夾中。(例如C:/Windows/System32...)
這時(shí)候,我們就得采用不同的方式:
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"
'文件內(nèi)容
WebForm.Response.Write(FileBody)
WebForm.Response.End()
End Function
上面這段代碼是下載一個(gè)動(dòng)態(tài)產(chǎn)生的文本文件,若這個(gè)文件已經(jīng)存在于服務(wù)器端的實(shí)體路徑,則可以通過下面的函數(shù):
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"
'文件內(nèi)容
WebForm.Response.Write(System.IO.File.ReadAllBytes(FilePath))
WebForm.Response.End()
End Sub
上面這兩個(gè)下載文件的的函數(shù),應(yīng)可解決大多數(shù)開發(fā)人員在ASP.NET當(dāng)中的文件下載問題。
Response.Redirect("test.doc")
您可以把上面這行指令放在Button的Click事件當(dāng)中,當(dāng)用戶點(diǎn)擊按鈕之后,網(wǎng)頁就會(huì)被轉(zhuǎn)址到該word檔,造成下載的效果。
但是這樣的下載有幾個(gè)問題:
1. 無法下載不存在的文件:例如,我們?nèi)羰窍氚殉绦騽?dòng)態(tài)(臨時(shí))產(chǎn)生的文字,當(dāng)作一個(gè)文件下載的時(shí)候(也就是該文件其實(shí)原先并不是真的存在,而是動(dòng)態(tài)產(chǎn)生的),就無法下載。
2. 無法下載存儲(chǔ)于數(shù)據(jù)庫中的文件:這是類似的問題,該文件并沒有真的存在,只是被存放在數(shù)據(jù)庫中的某個(gè)位置(某筆記錄中的某個(gè)欄位)的時(shí)候,就無法下載。
3. 無法下載不存在于Web文件夾中的文件:文件確實(shí)存在,但該文件夾并不是可以分享出來的Web文件夾,例如,該文件的位置在C:/winnt,您總不會(huì)想要把該文件夾當(dāng)作Web文件夾吧?這時(shí)候,由于您無法使用Redirect指向該位置,所以無法下載。
4. 下載文件后,原本的頁面將會(huì)消失。
典型的狀況是,我們要讓用戶下載一個(gè).txt文件,或是.csv格式的Excel文件,但是...
1. 這個(gè)文件可能是通過ASP.NET程序動(dòng)態(tài)產(chǎn)生的,而不是確實(shí)存在于Server端的文件;
2. 或是它雖然存在于伺服器端的某個(gè)實(shí)體位置,但我們并不想暴露這個(gè)位置(如果這個(gè)位置公開,很可能沒有權(quán)限的用戶也可以在網(wǎng)址欄上輸入U(xiǎn)RL直接取得!!!)
3. 或是這個(gè)位置并不在網(wǎng)站虛擬路徑所在的文件夾中。(例如C:/Windows/System32...)
這時(shí)候,我們就得采用不同的方式:
復(fù)制代碼 代碼如下:
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"
'文件內(nèi)容
WebForm.Response.Write(FileBody)
WebForm.Response.End()
End Function
上面這段代碼是下載一個(gè)動(dòng)態(tài)產(chǎn)生的文本文件,若這個(gè)文件已經(jīng)存在于服務(wù)器端的實(shí)體路徑,則可以通過下面的函數(shù):
復(fù)制代碼 代碼如下:
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"
'文件內(nèi)容
WebForm.Response.Write(System.IO.File.ReadAllBytes(FilePath))
WebForm.Response.End()
End Sub
上面這兩個(gè)下載文件的的函數(shù),應(yīng)可解決大多數(shù)開發(fā)人員在ASP.NET當(dāng)中的文件下載問題。
您可能感興趣的文章:
- Asp.net實(shí)現(xiàn)MVC處理文件的上傳下載功能實(shí)例教程
- ASP.NET Core實(shí)現(xiàn)文件上傳和下載
- ASP.NET?Core實(shí)現(xiàn)動(dòng)態(tài)獲取文件并下載
- asp.net實(shí)現(xiàn)多個(gè)文件同時(shí)下載功能
- ASP.NET實(shí)現(xiàn)從服務(wù)器下載文件問題處理
- asp.net實(shí)現(xiàn)服務(wù)器文件下載到本地的方法
- ASP.Net下載大文件的實(shí)現(xiàn)方法
- ASP.NET 在下載文件時(shí)對(duì)其重命名的思路及實(shí)現(xiàn)方法
- asp.net中文件下載功能的實(shí)例代碼
- asp.net 文件下載實(shí)現(xiàn)代碼
- ASP.NET MVC實(shí)現(xiàn)文件下載
相關(guān)文章
ASP.NET中等安全模式的一些經(jīng)驗(yàn)分享
如果你正在開發(fā)一個(gè)通用型的Web產(chǎn)品,比如BBS、CMS、BLOG這類的,那么,建議你閱讀以下本篇文章。2010-01-01
ASP.NET Core自動(dòng)生成小寫破折號(hào)路由的實(shí)現(xiàn)方法
這篇文章主要介紹了ASP.NET Core自動(dòng)生成小寫破折號(hào)路由的實(shí)現(xiàn)方法,幫助大家更好的理解和學(xué)習(xí)使用ASP.NET Core,感興趣的朋友可以了解下2021-04-04
.Net連接Oracle數(shù)據(jù)庫的實(shí)現(xiàn)代碼
本文使用System.Data.OracleClient方式,這是MS提供的以ADO.NET方式訪問Oracel的驅(qū)動(dòng);Oracle也有個(gè)Oracle Data Provider for .NET(ODP.NET)下篇再討論。2009-02-02
asp.net在事件中啟動(dòng)線程來打開一個(gè)頁面的實(shí)現(xiàn)方法
點(diǎn)擊一個(gè)按鈕做兩件事情,一件需要點(diǎn)擊按鈕馬上完成,另一件事情是點(diǎn)擊按鈕后做其他事情,不會(huì)的朋友一起來看看下面是如何實(shí)現(xiàn)的2014-11-11
輕量級(jí)ORM框架Dapper應(yīng)用之返回多個(gè)結(jié)果集
這篇文章介紹了使用Dapper返回多個(gè)結(jié)果集的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
ASP.NET簡(jiǎn)化編輯界面解決思路及實(shí)現(xiàn)代碼(2)
這篇與前一篇改進(jìn)部分,也許大家會(huì)留意到動(dòng)畫演示,主要是GridVeiw的更新與刪除會(huì)在每row都有。因此Insus.NET把它抽取出來,放在GridView外,感興趣的朋友可以了解下啊,希望本文對(duì)你有所幫助2013-01-01

