2019独角兽企业重金招聘Python工程师标准>>>

直接让客户端浏览器下载已知类型(*.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 通过"流"下载文件时显示中文文件名

转载于:https://my.oschina.net/pangzhuzhu/blog/317952

直接让浏览器下载文件而不打开相关推荐

  1. JS a标签下载文件而不打开文件

    // 下载文件 function downfile(obj) {var url = $(obj).attr("files");//url = "http://10.19. ...

  2. asp.net 浏览器下载文件的四种方式

    其实不是自己想要的,自己希望能够弹一个窗口出来选择保存的路径 protected void Button1_Click(object sender, EventArgs e){protected vo ...

  3. selenium,设置火狐浏览器下载文件时不要弹出弹框问题、以标签页打开新的页面及设置失效问题

    使用火狐浏览器做自动化时, 1.火狐浏览器下载文件会弹出弹框,可以通过设置火狐浏览器不要弹出弹框的方式,来完成自动化测试 def setup_method(self):# 创建一个存放自定义浏览器配置 ...

  4. nginx打开网页下载php,nginx,_nginx 访问localhost老是下载文件不能打开网页什么情况?,nginx - phpStudy...

    nginx 访问localhost老是下载文件不能打开网页什么情况? nginx sites-available文件里的default已经修改过root 路径了. 但是访问localhost的时候总是 ...

  5. 360浏览器下载文件成功但文件异常问题

    最近遇到用360浏览器下载文件,瞬间完成.但试图打开文件却打不开.用另一台电脑下载同样地址文件,发现文件大小不一样.怀疑是系统环境出了问题. 打开360卫士,找到[断网急救箱]执行[全面诊断]发现 [ ...

  6. 钉钉内置浏览器下载文件(钉钉跨域下载文件、图片等)

    刚开始在网上查询到很多资料其中最为广泛的是用<a>download下载,但是会遇到图片.txt.MP4等文件无法下载被浏览器直接打开,后来尝试用blob的方法进行字节流转换,虽然成功了,但 ...

  7. 怎么修改IE浏览器下载文件位置

    怎么修改IE浏览器下载文件位置 1.打开IE浏览器,设置,点击下载,如图所示: 2.点击2处的三个-点出现下载设置,点击. 3.点击下载设置之后可以看到,方框内默认下载到C盘的"下载&quo ...

  8. Microsoft Edge浏览器下载文件乱码修复方法(二)

    之前有写过"Microsoft Edge浏览器下载文件乱码修复方法",发现很多情况下下载文件乱码问题还是存在,这里对之前内容做简单补充,希望可以帮到大家. 方法二: 默认如果提示下 ...

  9. IE浏览器下载图片直接打开的问题

    使用IE浏览器下载图片直接打开的解决方法 两个部分的内容: ng alain中的下载文件模块的组件的引用 webpack打包遇到的一个问题 ng alain 链接如下:查看ng alain插件 完美解 ...

最新文章

  1. 【神经网络】(15) Xception 代码复现,网络解析,附Tensorflow完整代码
  2. 大容量类 Redis 存储的场景补充-pika
  3. 【通知】有三AI带学习资料的固态硬盘最后5个
  4. python免费下载及安装_Python的下载及安装
  5. java servlet 部署到tomcat_如何把spring boot项目部署到tomcat容器中
  6. 求一个任意实数c的算术平方根g_初中数学实数相关知识点:这些小技巧,解题有大用...
  7. JS-两个空数组为什么不相等?
  8. CentosRedhat下bcm43142博通无线网卡linux驱动之二
  9. sql插入数据的方式
  10. TMK2SLNO TMK1SLNO 华为OSN1800 2路STM-16,8路STM-4或8路STM-1光接口板
  11. HTML table border 属性
  12. kafka在rack间平衡replica
  13. 游戏服务器经常被DDOS攻击应该怎么办?
  14. win+r常用组合键大全
  15. 百万互动出圈爆品复盘,小红书品牌如何高效打造爆品?
  16. centos网卡启动故障报错
  17. 计算机辅助电路小结,电子电路计算机辅助设计实训报告.doc
  18. 华人数学家破译孪生素数猜想 影响或超1+2证明
  19. BIOS密码的去除与破解
  20. 解决 unity 按住鼠标右键 WS不能前进后退(我被自己蠢哭了)

热门文章

  1. 机器人学习--卡尔曼滤波及各种滤波解析
  2. Pycharm下载 安装 和谐 与 卸载
  3. 联想android刷机教程视频,联想s939刷机教程(刷官方系统)
  4. 包装类java_java中的包装类
  5. 三星s8清除html查看器,三星S8手机怎么双清 清理手机数据方法介绍 - Iefans
  6. java 自动拆箱_Java 自动装箱 和 自动拆箱
  7. 吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】
  8. 第四范式先知平台成为首个通过金融信创适配验证的AI产品
  9. access开发精要(6)-计算
  10. .net随笔-vb.net打开外部程序发送键盘信号(3)