使用a标签,点击自动下载文件(Excel),不做页面跳转

记录下最近项目中遇到的问题

知识点:

编码:防止乱码

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

encodeURI() 函数可把字符串作为 URI 进行编码,字符将被十六进制的转义序列进行替换 decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码

请求方式:

a标签默认请求方式是get请求

最主要的设置响应头,即使没有点击事件做处理

响应由设置正确了,点击a标签后也不会跳转页面

注意:没有设置响应头,点击a会把href中的地址当成页面路径,这是不对的,直接跳转会报404错误,这是找不到对应地址的页面

关键部分:设置响应头

注意到第一个值项是attachment,这是真正的关键,设定了这个值,浏览器就会老老实实地显示另存为对话框

如果这个值设成inline,则无论怎样浏览器都会自动尝试用已知关联的程序打开文件

// 1. 使客户端浏览器,区分不同种类的数据,以及编码方式
response.setContentType("text/xml;charset=UTF-8");
// 2. 强制浏览器下载
response.setHeader("content-disposition", "attachment;filename=" + 文件名 + 后缀);
// 3. 设置传输的文件大小
response.setHeader("Content-Length",文件长度.toString() / 文件长度 + "");   // 注意:这里length要传入字符串类型
​
​
​
// 浏览器尝试打开,支持office online或浏览器预览pdf功能
response.setHeader("content-disposition", "inline;filename=" + realName);

打开新页面:

target="_blank"

解决方案:

前端页面

页面:a标签,配置下载路径

<a href="下载路径">点击下载</a>

后端部分

Controller:

1.获取需要写入Excel的数据

2.数据处理

3.写入Excel

4.设置响应头(编码方式,文件类型。。。)

5.开始传入
    OutputStream os = response.getOutputStream();
    os.write(Excel文件);
    os.close();

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值