经过我测试除了文件名称包含英文逗号谷歌会下载失败外,其它的都没问题了。这个找到解决方法了再补上,先记录一下
String userAgent = request.getHeader("user-agent").toLowerCase();
if (userAgent.contains("msie")) {// IE
try {
fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("%20", "\\+").replaceAll("%28", "\\(")
.replaceAll("%29", "\\)").replaceAll("%3B", ";").replaceAll("%40", "@").replaceAll("%23", "\\#")
.replaceAll("%26", "\\&").replaceAll("%2C", "\\,").replaceAll("%24", "\\$")
.replaceAll("%25", "\\%").replaceAll("%5E", "\\^").replaceAll("%3D", "\\=")
.replaceAll("%2B", "\\+");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
} else if (userAgent.contains("like gecko")) {// 谷歌
try {
fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("%20", "\\+").replaceAll("%28", "\\(")
.replaceAll("%29", "\\)").replaceAll("%3B", ";").replaceAll("%40", "@").replaceAll("%23", "\\#")
.replaceAll("%26", "\\&").replaceAll("%2C", "\\,").replaceAll("%24", "\\$")
.replaceAll("%25", "\\%").replaceAll("%5E", "\\^").replaceAll("%3D", "\\=")
.replaceAll("%2B", "\\+").replaceAll("%5B", "\\[").replaceAll("%5D", "\\]")
.replaceAll("%7B", "\\{").replaceAll("%7D", "\\}");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
} else if (userAgent.contains("firefox")) {// 火狐
try {
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1").replaceAll("%20", "\\+")
.replaceAll("%28", "\\(").replaceAll("%29", "\\)").replaceAll("%3B", ";").replaceAll("%40", "@")
.replaceAll("%23", "\\#").replaceAll("%26", "\\&").replaceAll("%2C", "\\,")
.replaceAll("%24", "\\$");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
}
这篇博客记录了在Java中处理文件下载时,如何处理文件名包含特殊字符导致下载失败的问题。针对IE、谷歌和火狐浏览器,分别采用不同的编码和替换策略来修正文件名。

6188

被折叠的 条评论
为什么被折叠?



