这是笔者常被问到的一个问题,如何通过ASP.NET下载文件,这个问题可大可小,我们先从小的开始。当我们要让用户下载一个文件,最简单的方式是通过Response.Redirect指令:

殇﹖ ☆粉汐げ沫沫 №柳絮飘零℡ 忘记 - 國際后爹。 ┌┌賣身 杨易易 丶ㄗìng*` 聖ジゞ心 |▍`縵嗨 ^蓝^幻 ♂演卜莞啲戏 &流浪鱼^ 自由人 Kugoo ●Lzisgod● ″_.淡莣°﹖ ωǒ﹎緈輻? ┆鮳丄嘍┆~~ TAK-AKINA "`.惔莣.à﹖ ..壊尐孓 ゝ尛樂冃學 Lovin U 不想恋爱 ↘*潶Sè 襘 Sminis┆煌 ギ℡娚魜菋メ YGL^o^義 千里快哉风 H^ō^H 开心果 新新 smile~ {→.°難舍` 云翔 -〣ˇ莣誋◆ ╘*.兲使 __. 亡命天涯 ぁ嗳マ♀ヶ乔 ぐo騩贰爺︶ 木時 123?? SOSO用户 天使/ty草鱼 _﹥雙.漁蓙_ 爱袮爬上牆  ゛綪譅﹖ 木時 outsider ℅﹏彎○° ⒓冄23號 ℡誮惢ヾ 〆coooal﹏ ωǒ鈈袙※瀭 ︶ㄣ繌尐孓 老野 _ 蒤鵶.· 冥王の殇烙印 oО啡露⒏娶_ 『ˉ蕗ˉ』 の月ぜ光の SOSO用户 "Xīao┘肖 →習慣有袮ぺ 南無阿彌陀佛 瘋狂的喵喵 佳佳 愛捉弄人D.豬 打死也不能说 [潮濕]。 /ty╲_/~↘ 上帝メ禁區 溈鉨wo乄菰単 摇滚¢堕落 K★T★V★ ←¢幻風☆ ↘静静的。。 ︶ㄣ愛誰誰ㄣ ℉ǒr下午``` ↙℡︱聯盟灬 尐孓/勾贼嘢 我叫什么? ゝ天囿┌藍 『火¤影』暗 喤締√ 高天流云 ぜだ♂ 黑崎一户 ゛-.閉 - 〆宝宝鱼ぐ 尘封记忆 卿松敷任 κ﹏錯〆覺 午后柠檬茶 精灵 日&月 一米阳光 有话直说 麥咯ダ麥﹫ -あXeyuuあ 血龙⑻寒风 随时 々諥キ嚸★← 偉偉/aiq最乖 ︵ShoW躌の帅 o.謊言..╱ 涙_Sky.孤独 影 季 鲈莼思归 あ冰山来客あ 流浪的疾风 ゛從紟暀後ˊ §如梦人生★ (_蒍祢变乖 这一季 八千女鬼 Dongr 阿君/xixin 皒,厛兲甴掵 LOVEの永远 /mg微笑 ジ緣起吥滅ジ 一切皆有可能 商████ 俊 獨行★天下 ご&ァ^╅緣╰ 夏水朦胧 飞雪飘扬 單純哋壞︶ㄣ (_頖縌ゞ尐姊 ㊣西湖づ壟王 愛の無限 '苊祉為尓哭. 喜欢你 ぃ閉幕式íΟ 你的左伴边 妖精鱼儿 ご孤單菋噵ご 喜喜 ﹎亂倫 ɑべ -到此爲止, せね亢吻掂ひ |ミ桖ㄨ際╮ WYAN 懶す喫草つて ▉▉冷血▉▉ 今世無緣 愛伱不是遊戲 ^球園書方か. ылε彬 ぃ旮旮跩う 魔鬼 ヤ吓ωǒ①跳 蓝鱼 蒓べ愛℡﹎嚖 笨毛毛 ●▕謀娚孓" /;f素颜如故 ♀少爺★偉¤ ‘虛僞 ポ岥つ尒さ陔 丅芈zai薆亇 ぐ灬葬︶ㄣ淚 ‘ 牜.Ы !` ら蝳薬ん ℡戀丄妳 玉九易 【禁止騷擾】 ゞ 淚 .﹖ 綠夢飛影 雪玲珑 善良Vs邪神 ♂葬≡ω≡祤 SOSO用户 灬莣ろ伱﹖ `〇畏.尛媫 ●.┍晨曦┚ o.﹎尜篈 Kld.Andy 绝不/aiq后悔 傷心≌無奈 永遠ご㊣戀ぷ _▂.絕い朢 缺失的天空 ╳灬笨笨滴ぴ 落叶随风 Z.Z=稀 ┢┦apΡy♂ な星ジ空乄下 最最幸运的人 恶魔/dx 破煖壷 いせ零 ╰⒎厷宔﹖ヤ o.繡譅′」藸 ★.寵愛n1. 愛妳/aiq無悔 川子 じ沉没过后こ ドるビ ↘夨憶m儍お 海洋~ 伤…… 缘来是你 ベwǒ吥後悔 ●(╱引﹎X" 看见老鼠洞 燕子 ·o.苛嗳寶貝 百乐 戀メ僤蒓蘭爱 情是那麼笨 あ浅浅の嘚僾 .ī藍铯哒楓 Se7eη柒.誡 等待 ﹎′.錯覺、 魏向军 → 递归 /:+ COOL狗 ~餉祐赱﹏ 尐嘴亂儭亨 ωǒ/xin伤 聆@听☆世@界 ヅ天使ぺ嫙嵂 〢蘅◆嗳╲↘ -[艹莓頭]’ 兆/fw祺 ·ㄚòひ ? ⒓愛⒉⒍妳 庝♀妍ル SOSO用户 天苍い零儿 寻仙问道 :Iov3寶呗 冰厸¢翔宇 ▌再黬壹橫▌ ゛尛藾の潴ゞ Rеvоlνeг мe˙寳児 X'卜覀亼 ″_.牯惑钕. 冰宫魔女 “喆”以死 优の优love♀ ご孤單菋噵ご  啵罩‵ linda ╰☆冰@だ/cy 笑看人生 SOSO用户 七夜 蓝色古月 末路狂花 21dē愛↗♀ 海方舟/aiq 囧灬墜落天使 |宝贝薇儿 专打龟系列 菏MIN -↘"肚兜 | ′..晕s_ 11 ▄_鬭* _ωǒ﹎鍆~ ˇ葬№嗳√ ╪尐嘴亂親. 亂了放棄感覺 - [藍]1/蒅 Xiǎo/mg輝 ゥ&竹 ゞ戀伱①輩孓 ♂笑骂自由人 `.`.暫無.... shuffle 程思成就未来 阳光的味道 後續★鉉ù 賣血丄網 .◆|.壞秂丿 无缘/tx爱你 xinxing鮭鮭 №恋※舞人间 Mua.〢兲缔℡ 一生兄弟 ⒈笙の僾伱 ssss 冰焰温情 .羙侽籽./db 涟漪 Fly_100% №龍§尐☆ 晨风晓月 gfhjj 芸海桂/tp ★零八★ 深海之潮 飘 ☆☆☆☆☆ 石头 安静的C调 三百六十柒天 寶貝≒淚 糸色 望 ぃ吖ゞ頭 ●'|Xx蔸糨. 双子座飞鸟 SOSO用户 .|°妷.杺! 冷如风 木柔/love 木時 穿睡衣的果冻 语过添情 SOSO用户 ⊙_⊙乖の乖~ -[G/t 镜源世尘 华尔街 echo Dg 傑ル 123

以下是引用片段:
  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. 解析:如何在 ASP.NET 中下载文件

    解析:如何在 ASP.NET 中下载文件 来源:博客园 作者:dotnetWalker 这是笔者常被问到的一个问题,如何通过ASP.NET来下载文件,这个问题可大可小,我们先从小的开始.当我们要让用户 ...

  2. ASP.NET中下载文件的几种方法

    2008年5月27日17:44:07 //TransmitFile实现下载     protected void Button1_Click(object sender, EventArgs e)   ...

  3. 如何在ASP.NET中生成HTML5离线Web应用

    传统的Web应用程序有一个很大的症结是当用户的网络连接不好时,应用会加载失败,为了 解决这一问题,HTML5中引入了Web的离线工作的功能.离线功能使得Web应用程序类似于本机应用程序,当断开网络连接 ...

  4. asp.net应用程序_如何在ASP.NET中为聊天应用程序构建键入指示器

    asp.net应用程序 by Neo Ighodaro 由新Ighodaro 如何在ASP.NET中为聊天应用程序构建键入指示器 (How to build a typing indicator fo ...

  5. .net中下载文件的方法(转)

    .net中下载文件的方法 一.//TransmitFile实现下载      protected void Button1_Click(object sender, EventArgs e)      ...

  6. java 从网络Url中下载文件

    转自:http://blog.csdn.net/xb12369/article/details/40543649 /*** 从网络Url中下载文件* @param urlStr* @param fil ...

  7. VSTO学习笔记(四)从SharePoint 2010中下载文件

    原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给CO ...

  8. java调用下载窗口_java 从网络Url中下载文件 java调用url接口

    /** * 从网络Url中下载文件 * @param urlStr * @param fileName * @param savePath * @throws IOException */ publi ...

  9. 如何在Git分支中搜索文件或目录?

    本文翻译自:How can I search Git branches for a file or directory? In Git, how could I search for a file o ...

最新文章

  1. ubuntu如何修改字符集编码
  2. java字符串反转方法【全】
  3. phpmyadmin登录远程mysql数据库
  4. Matlab xlim ylim zlim函数
  5. 【数据结构基础】-串-顺序结构的基本操作实现
  6. How GPUs Work
  7. 原生input和onchange
  8. android studio聊天跳转_android app跳转到微信的示例
  9. Qt---MaintenanceTool
  10. Mac OS X 安装protobuf
  11. vagrant 网络三种模式
  12. 【POJ 1733】Parity game【带权并查集维护奇偶】
  13. JAVA 电子书下载地址
  14. hibernate官网下载
  15. 基于Java语言实现全国交通咨询模拟
  16. android 读取 json 字符串文件遇到的一个坑 W/art: Suspending all threads took: xx.xxx ms
  17. abs、fabs 用法
  18. 用Html+js自己写了一个小游戏
  19. AirServer最新Win64位个人版投屏软件
  20. layui-table表格根据条件更换表格背景颜色,高亮显示

热门文章

  1. Photoshop 技能167个(2)
  2. 西门子PLC通过RS485串口连接维特智能Modbus协议角度姿态传感器HWT905(4)——多传感器多角度报警
  3. 批量邮件 邮件合并 Word
  4. 如何通过EDIUS特效实现卷轴的制作
  5. Three.js 深度测试
  6. Android图库(系统相册)的数据库
  7. Dissection C Chapter 6
  8. 万网php发不了邮件,万网等虚拟主机不能SMTP发信的解决方案
  9. 计算机集中控制系统结构上和DCS基本一致,集散控制系统与现场总线试题习题及答案全解.doc...
  10. 大学计算机组装虚拟实验,计算机硬件组装虚拟实验系统设计研究