点击超链接实现文件下载而不是打开

一、问题发生

在学习文件下载功能时出现了以下问题:

  1. 当下载图片类型文件时,会在浏览器中直接打开
  2. 添加Content-Disposition: attachment 响应头无效,图片还是直接打开
  3. 添加Content-Disposition: attachment 图片可以下载,但pdf类型文件还直接打开

本文将针对以上三个问题的解决展开。

二、问题解决

1、Content-Disposition响应头字段

     Content-Disposition 指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地。【参考文献】

举例说明:

Content-Disposition: inline
Content-Disposition: attachment
Content-Disposition: attachment; filename=“filename.jpg”

在HTTP场景中,inline,默认值,表示回复中的响应体会以页面的一部分或者整个页面的形式展示,
attachment 表示响应体应该被下载到本地;大多数浏览器会呈现一个“保存为”的对话框,将filename(可选)的值预填为下载后的文件名,假如它存在的话。

2、添加Content-Disposition无效
主要原因:你先将文件流写入HttpServletResponse对象,后设置响应头字段,导致响应头设置无效。

正确做法如下所示

public void doGet (HttpServletRequest req, HttpServletResponse resp) {
  1、设置响应头
  resp.setHeader("Content-Disposition", "attachment");
  ......
  2、将文件流写入HttpServletResponse对象
  resp.getOutputStream().write(下载文件字节数组);
}
3、pdf文件在浏览器中打开而不是下载

主要原因:和浏览器设置有关。
以谷歌浏览器为例:在设置中搜索pdf,如下图所示。

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月几时有666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值