在ASP.NET中下载文件的实现代码
2023-06-13 09:14:32 时间
这是笔者常被问到的一个问题,如何通过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...)
这时候,我们就得采用不同的方式:
复制代码代码如下:
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...)
这时候,我们就得采用不同的方式:
SharedFunctionDownloadFile(ByValWebFormAsSystem.Web.UI.Page,ByValFileNameWhenUserDownloadAsString,ByValFileBodyAsString)
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()
EndFunction
上面这段代码是下载一个动态产生的文本文件,若这个文件已经存在于服务器端的实体路径,则可以通过下面的函数:
SharedSubDownloadFile(ByValWebFormAsSystem.Web.UI.Page,ByValFileNameWhenUserDownloadAsString,ByValFilePathAsString)
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()
EndSub
上面这两个下载文件的的函数,应可解决大多数开发人员在ASP.NET当中的文件下载问题。
相关文章
- Java使用commons-net实现FTP文件上传详解编程语言
- 联手开发:.NET与Oracle的合作之路(.net和oracle)
- Net访问Oracle数据库的简易方法(.net访问oracle)
- ASP.NET通过Remotingservice上传文件
- asp.net(c#)中取得文件物理路径
- vb.net读写文件代码
- 运行asp.net时出现 http错误404-文件或目录未找到
- asp.net文件下载的通用方法
- 手动把asp.net的类生成dll文件的方法
- asp.net文件下载实现代码
- asp.net导出到CSV文件乱码的问题
- Asp.Net网站优化系列之数据库的优化措施与索引优化方法
- asp.net未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。
- ASP.NET文件断点续传实现代码
- 修改服务器配置让asp.net文件后缀名随心所欲
- Asp.net+jquery+.ashx文件实现分页思路
- asp.net解决上传4M文件限制
- ASP.net全局程序文件Global.asax用法分析
- .net文件上传时实现通过文件头确认文件类型的方法
- asp.net后台动态添加JS文件和css文件的引用实现方法