前台请求后台下载文件防止文件因不同浏览器而乱码

前台请求后台下载文件防止文件因不同浏览器而乱码
乱码问题传送门
按照RFC2231的定义,多语言编码的Content-Disposition应该这么定义:

Content-Disposition: attachment; filename*=“utf8’’%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt”
即:

  1. filename后面的等号之前要加 *
  2. filename的值用单引号'分成三段,分别是字符集(utf8)、语言(空)和urlencode过的文件名。
  3. 最好加上双引号,否则文件名中空格后面的部分在Firefox中显示不出来
    后台方法
//防止下载时文件名乱码
try {
	String filename= "表格 文件名有空格.xls";
	//把要下载的文件转成字节数组
	byte[] byteArray = FileUtils.readFileToByteArray(new File(filepath));
	//文件名转码
	filename = java.net.URLEncoder.encode(filename, "UTF-8");
	//处理空格被转换为+的问题
	filename = filename.replaceAll("\\+","%20");
	//filename*=UTF-8''  告诉客户端浏览器以utf8解码方式打开文件
	resp.setHeader("Content-Disposition", "attachment;filename*=UTF-8''"+filename+"");
	OutputStream outputStream = resp.getOutputStream();
	IOUtils.write(byteArray, outputStream);
	outputStream.flush();
	outputStream.close();
} catch (IOException e) {
	e.printStackTrace();
}

前台请求

function download() {
	var url = "/controller/download.do";
	window.open(encodeURI(url));
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

無间行者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值