佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 在ASP.NET中下載文件的實(shí)現(xiàn)代碼

在ASP.NET中下載文件的實(shí)現(xiàn)代碼

熱門(mén)標(biāo)簽:Mysql連接數(shù)設(shè)置 科大訊飛語(yǔ)音識(shí)別系統(tǒng) 銀行業(yè)務(wù) Linux服務(wù)器 電子圍欄 團(tuán)購(gòu)網(wǎng)站 阿里云 服務(wù)器配置
這是筆者常被問(wèn)到的一個(gè)問(wèn)題,如何通過(guò)ASP.NET來(lái)下載文件,這個(gè)問(wèn)題可大可小,我們先從小的開(kāi)始。當(dāng)我們要讓用戶下載一個(gè)文件,最簡(jiǎn)單的方式是通過(guò)Response.Redirect指令:

  Response.Redirect("test.doc")

  您可以把上面這行指令放在Button的Click事件當(dāng)中,當(dāng)用戶點(diǎn)擊按鈕之后,網(wǎng)頁(yè)就會(huì)被轉(zhuǎn)址到該word檔,造成下載的效果。

  但是這樣的下載有幾個(gè)問(wèn)題:

1. 無(wú)法下載不存在的文件:例如,我們?nèi)羰窍氚殉绦騽?dòng)態(tài)(臨時(shí))產(chǎn)生的文字,當(dāng)作一個(gè)文件下載的時(shí)候(也就是該文件其實(shí)原先并不是真的存在,而是動(dòng)態(tài)產(chǎn)生的),就無(wú)法下載。
2. 無(wú)法下載存儲(chǔ)于數(shù)據(jù)庫(kù)中的文件:這是類似的問(wèn)題,該文件并沒(méi)有真的存在,只是被存放在數(shù)據(jù)庫(kù)中的某個(gè)位置(某筆記錄中的某個(gè)欄位)的時(shí)候,就無(wú)法下載。
3. 無(wú)法下載不存在于Web文件夾中的文件:文件確實(shí)存在,但該文件夾并不是可以分享出來(lái)的Web文件夾,例如,該文件的位置在C:/winnt,您總不會(huì)想要把該文件夾當(dāng)作Web文件夾吧?這時(shí)候,由于您無(wú)法使用Redirect指向該位置,所以無(wú)法下載。
4. 下載文件后,原本的頁(yè)面將會(huì)消失。

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

1. 這個(gè)文件可能是通過(guò)ASP.NET程序動(dòng)態(tài)產(chǎn)生的,而不是確實(shí)存在于Server端的文件;
2. 或是它雖然存在于伺服器端的某個(gè)實(shí)體位置,但我們并不想暴露這個(gè)位置(如果這個(gè)位置公開(kāi),很可能沒(méi)有權(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í)體路徑,則可以通過(guò)下面的函數(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ù)開(kāi)發(fā)人員在ASP.NET當(dāng)中的文件下載問(wèn)題。
您可能感興趣的文章:
  • ASP.NET Web Api 2實(shí)現(xiàn)多文件打包并下載文件的實(shí)例
  • ASP.NET(C#) Web Api通過(guò)文件流下載文件的實(shí)例
  • ASP.NET批量下載文件的方法
  • ASP.NET 在下載文件時(shí)對(duì)其重命名的思路及實(shí)現(xiàn)方法
  • asp.net C#實(shí)現(xiàn)下載文件的六種方法實(shí)例
  • ASP.NET中下載文件的幾種實(shí)例代碼
  • asp.net BackgroundWorker之在后臺(tái)下載文件
  • asp.net 下載文件時(shí)根據(jù)MIME類型自動(dòng)判斷保存文件的擴(kuò)展名
  • asp.net 下載文件時(shí)輸出文件內(nèi)容
  • asp.net Web Services上傳和下載文件(完整代碼)
  • ASP.NET實(shí)現(xiàn)從服務(wù)器下載文件問(wèn)題處理

標(biāo)簽:棗莊 江蘇 廣元 大理 衡水 萍鄉(xiāng) 蚌埠 衢州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在ASP.NET中下載文件的實(shí)現(xiàn)代碼》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    河曲县| 宣化县| 青冈县| 佛坪县| 永和县| 开远市| 玉山县| 内丘县| 赤壁市| 孟连| 淮阳县| 大兴区| 德江县| 宣化县| 卢氏县| 龙胜| 沽源县| 襄汾县| 葫芦岛市| 沐川县| 商洛市| 改则县| 温泉县| 巍山| 湾仔区| 凤翔县| 扶绥县| 清丰县| 合肥市| 大兴区| 永州市| 霍邱县| 大厂| 永新县| 长阳| 老河口市| 明星| 新邵县| 新兴县| 尼勒克县| 甘南县|