下载文件,文件名综合问题

今天遇到一个需求,客户希望以文档中一个非常重要的字段值作为下载文件名称。难点在于,这个字段的值可以是各国语言、可以包含绝大部分特殊字符(比较特殊的是逗号,因为Chrome浏览器无法下载名称中含有逗号的文件)。代码如下:

	String latin1 = "ISO-8859-1";
	if (!documentName.isEmpty()){
		documentName = documentName.replaceAll("[/\\\\:*?\"<>|]", "");
		//由于与美国客户沟通麻烦,而且这个字段几乎不可能只含有“/\\\\:*?\"<>|”,所以并没有考虑documentName变为空字符串后的默认名字。
	}
	// Latin1:Single-byte coding, to resolve Chinese scrambled code problem
	response.addHeader("Content-Disposition", "attachment; fileName=\"" + new String(documentName.getBytes(), latin1) + documentExtension + "\"");

我只测试了Chrome/FireFox, 也会有其他浏览器出问题的几率,我搜索了好多资料,并没有一个完美的解决方案。
PS:这里面还有一个大坑,哈哈哈。如果documentName.length() 大于系统规定的文件全路径名最大长度,不同浏览器的表现是不一样的。据我所知,Chrome会适当截取,而微软家的浏览器(IE,Edge)就傻掉了。
测试结果:
这里写图片描述

参考资料:
How to encode the filename parameter of Content-Disposition header in HTTP?
Content-Disposition中filename字段的字符编码技巧[转]
HTTP协议header中Content-Disposition中文文件名乱码
How do I convert special UTF-8 chars to their iso-8859-1 equivalent using javascript?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值