文档章节

直接让浏览器下载文件而不打开

猪刚烈
 猪刚烈
发布于 2014/09/24 13:52
字数 757
阅读 174
收藏 0
JSP

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

直接让客户端浏览器下载已知类型(*.doc)的文件  ,而不使用关联程序打开。
   
    Web开发人员都有过这样的疑问,如何让一个文件,尤其是一个已知类型的文件(*.doc),发送到客户端,直接提示让浏览者下载,而不是用与它相关联的程序打开。

    以前我们最常用的办法就是把这样的文件加到链接上,这样可以让浏览者通过点击鼠标右键的目标另存为来下载所链接的文件。但是,这样有两个不足的地方:  
    一是:如果浏览器能够识别已下载文件的扩展名,则浏览器就会激活该扩展名所关联的程序来打开所下载的文件。比如:在Windows平台上,如果用户点击的链接链接的是一个“.doc”文件的话,那么,浏览器就会启动Microsoft   Word应用程序来打开它。  
    二是:如果采用链接的办法的话,任何能看到该链接的人都可以下载该文件,你虽然也可以对所下载的文件进行权限设置,但那样做也不是很方便的。有时候我们需要更为灵活和富有弹性的方式,下面的程序能够很方便地克服以上两方面的不足。  
    这种办法是可靠的,但你必须记住:没有授权的用户不能够通过在浏览器地址栏里输入文件的URL来取得该文件的下载权。所以,要下载的文件应该放到虚拟目录之外的一个目录里,比如:如果你的虚拟目录是C:\Mengxianhui\Tomcat4\Website\MyApp的话,那么,存放在该目录和该目录下的任何子目录下所有文件对因特网上的任何用户都是可见的。

    要直接下载一个文件,我们需要做两件事,

   第一件事是:设定响应的内容类为“application/octet-stream”,大小写无关。

   第二件事是:设置HTTP的响应头名字为:Content-Disposition,设定值为:attachment;   filename   =   theFileName。这里的theFileName就是出现在文件下载对话框里的默认文件名,通常和所下载的文件名字相同,但也可以不同。

 

下面,我们就平常最常用的JSP和ASP页面来举一个实际应用的例子。  
     
      download.JSP页面的例子:

<%  
      //   得到文件名字和路径  
      String   filename   =   "MengxianhuiDocTest.doc";  
      String   filepath   =   "D:\\";  
       
      //   设置响应头和下载保存的文件名  
      response.setContentType("APPLICATION/OCTET-STREAM");  
      response.setHeader("Content-Disposition",  
      "attachment;   filename=\""   +   filename   +   "\"");  
     
      //   打开指定文件的流信息  
      java.io.FileInputStream   fileInputStream   =  
        new   java.io.FileInputStream(filepath   +   filename);  
         
      //   写出流信息  
      int   i;  
      while   ((i=fileInputStream.read())   !=   -1)   {  
        out.write(i);  
      }  
      fileInputStream.close();  
      out.close();  
    %>
 

下载时被显示的文件名包含中文时,要编码
String filename=new String("手册.pdf".getBytes("GBK"),"8859_1");

 

如果使用了Struts 2,可以参看:

Struts2 通过"流"下载文件时显示中文文件名

 

本文转载自:http://elf8848.iteye.com/blog/275823

猪刚烈

猪刚烈

粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
如何绕过百度网盘客户端下载大文件

如何绕过百度网盘客户端下载大文件 众所周知, 自从百度网盘停止对旧版本将不再支持登录使用后, 给类破解版百度云, 都已无法登陆, 百度网盘客户端在无VIP下载的情形下巨慢。 这种情况下该...

llCnll
2017/04/09
0
0
微信打开网页下载东西时如何调用其他浏览器下载

很多朋友问我怎么解决微信内点击链接或扫描二维码打开网页时可以直接跳出微信在外部浏览器打开网页链接,其实这并不难,只要我们实现微信跳转功能即可。下面给大家介绍这个功能 功能目的 生成...

且与2
04/02
0
0
实谈微信内置浏览器无法打开app下载页的解决办法,生成微信跳转链接

想必大家会经常碰到网页链接在微信内无法打开和微信内无法打开app下载页的情况。通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下四点 1、网...

wty13
04/02
0
0
苹果手机在微信内打开APP下载链接时怎么做到直接微信内下载

大家是不是经常会遇到微信内点击链接或扫描二维码无法打开指定网页的问题?只要你使用微信转发分享,相信你就一定会遇到,那么打不开的原因很简单了,就是被微信拦截了。这个问题我们只需要实...

日出真美
04/06
0
0
微信内扫描识别二维码打开网页的时候调用外部浏览器打开页面

很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接,其实这并不难,只要我们实现微信跳转功能即可。下面给大家介绍这个功能 功能目的 生成微信跳转链...

我与以往
04/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

在C语言中“静态”是什么意思?

我已经在C代码的不同地方看到了static一词。 这就像C#中的静态函数/类(实现在对象之间共享)吗? #1楼 多文件变量作用域示例 在这里,我说明了静态如何影响多个文件中函数定义的范围。 交流...

javail
6分钟前
3
0
利用 FC + OSS 快速搭建 Serverless 实时按需图像处理服务

作者:泽尘 简介 随着具有不同屏幕尺寸和分辨率设备的爆炸式增长,开发人员经常需要提供各种尺寸的图像,从而确保良好的用户体验。目前比较常见的做法是预先为一份图像存放多份具有不同尺寸的...

阿里巴巴云原生
8分钟前
2
0
前端架构最佳实践

Folders-by-Feature Structure 胜过 Folders-by-Type Structure

lilugirl
19分钟前
3
0
Seata AT 模式启动源码分析

从上一篇文章「分布式事务中间件Seata的设计原理」讲了下 Seata AT 模式的一些设计原理,从中也知道了 AT 模式的三个角色(RM、TM、TC),接下来我会更新 Seata 源码分析系列文章。今天就来分...

后端进阶
20分钟前
3
0
Python中“自我”一词的目的是什么?

Python中self词的目的是什么? 我知道它是指从该类创建的特定对象,但是我看不到为什么要将它显式地作为参数添加到每个函数中。 为了说明这一点,在Ruby中,我可以这样做: class myClass ...

技术盛宴
22分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部