解析:如何在 ASP.NET 中下载文件
 来源:博客园 作者:dotnetWalker

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

  这是笔者常被问到的一个问题,如何通过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当中的文件下载问题。

转载于:https://www.cnblogs.com/twttafku/archive/2008/06/03/1212617.html

解析:如何在 ASP.NET 中下载文件相关推荐

  1. 如何在 ASP.NET 中下载文件

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

  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. 计算图像的标准差与方差(meanStdDev() 函数)
  2. 宏基因组序列物种分类之kraken 1/2和Bracken的使用
  3. Maven下载、安装和配置(转)
  4. [Gamma阶段]第十次Scrum Meeting
  5. Redis学习资料整理
  6. php负载均衡面板,nginx负载均衡的五种策略
  7. java web开发常用标签
  8. 1070 结绳 (25 分
  9. 新盲盒星球抽奖商城手机网站源码 随机开箱抢购
  10. mysql image类型_MyCat教程【mysql主从复制实现】
  11. 微软在华推广Win7拒绝“黑屏”
  12. 如何自己实现一个缓存服务
  13. 黑苹果efi制作_黑苹果微星B450AMD完美方案分享包括EFI制作工具及教程
  14. Latex绘制三线表
  15. tps协议和onvif协议_摄像头ONVIF协议,到底啥是ONVIF,又是啥意思?
  16. Tomcat安装配置及IDEA配置方法【亲测有效】
  17. 利用WireShark分析H264码流
  18. linux yum安装scp,CentOS安装scp命令的软件包openssh-clients
  19. 《Network Science》:一本关于网络科学的书
  20. 爬取图片-工作常用小工具01

热门文章

  1. github fork别人项目后如何同步更新原项目
  2. 计算机2010ppt试题,计算机Office2010 PPT试题.doc
  3. c语言常用转向的语句,java中类似于C语言的goto无条件转向语句的语法是什么?...
  4. java翻译数字串并打印_如何使用Java翻译字符串?
  5. 下拉框怎么获取label_拼多多-「关键词自然流量快速获取」访客暴涨秘诀
  6. 网络掩码和子网掩码区别?
  7. Codeforces Round #456 (Div. 2): E. Prime Gift(折半枚举)
  8. bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(DP)
  9. C++ STL getline函数
  10. c#开发大全、系列文章、精品教程