文件下载弹出框

网站不仅仅只包含网页,有时你需要提供用户能下载的文件。将你的文件放到服务器上并在网页中附上链接只是第一步,你还需意识到HTTP响应的头文件影响文件下载。

提示一:强制下载并控制文件名

在HTML中提供一个下载链接很简单:

< a href = "http://download.httpwatch.com/httpwatch.exe" >Download< a >

对于浏览器不知道如何呈现的二进制文件,如安装程序和ZIP文件,这工作的很好。这会出现一个对话框,允许用户将文件存储到本地。

问题在于,如果文件能呈现自己,不同的浏览器行为就不一样。例如,如果你链接一个纯文本文件,浏览器会打开它,不会提示保存下载。

你可以加入以下响应头文件强制使用文件下载对话框。

Content-Disposition: attachment; filename=<file name.ext>

头部还可以控制默认的文件名,这可以帮助你方便的生成像getfile.aspx一样的内容,但你要提供一个更有意义的文件名给用户。加入了头部之后,浏览器总是提示用户下载该文件:

大部分文件下载都是通过url文件链接直接下载的,但是考虑到盗链,跨服务器访问等因素,直接文件流下载也是必要的,文件流的下载代码如下:

response.setContentType("application/x-download");//设置为下载application/x-download
System.out.println(this.getClass().getClassLoader().getResource("/").getPath());
String filenamedownload = this.getClass().getClassLoader().getResource("/").getPath() + "/../../系统解决方案.doc";
String filenamedisplay = "系统解决方案.doc";//系统解决方案.txt
filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay); //attachment表示网页会出现保存、打开对话框

//response.addHeader("Content-Disposition","inline;filename=" + filenamedisplay); //inline表示文件直接输出到网页上,不出现保存打开对话框
OutputStream output = null;
FileInputStream fis = null;
try{
output= response.getOutputStream();
fis = new FileInputStream(filenamedownload);
byte[] b = new byte[1024];
int i = 0;
while((i = fis.read(b)) > 0)
{
output.write(b, 0, i);
}
 output.flush();
 }
 catch(Exception e)
 {
 System.out.println("Error!");
 e.printStackTrace();
 }finally {
 if(fis != null) {
 fis.close();
 fis = null;
 }
 if(output != null) {
 output.close();
 output = null;
 }  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值