今天遇到 同一个文件在不同的浏览器 上有的可以下载有的不能。
………………………………省略部分代码………………………………………………
// 设置Header一定要在response.getOutputStream()前,否则不生效。
String fileName = attachment.getFileName();
**// 这里的编码只对 火狐浏览器 有效 谷歌 ie 无效
String name = new String(fileName.getBytes(), "ISO8859-1");
response.setHeader("Content-Disposition", "attachment; filename=" + name);**
outputStream = response.getOutputStream();
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
outputStream.flush();
………………………………省略部分代码………………………………………………
原因:
文件名中包含特殊字符,不同的浏览器的编码规范又不样,没有对特定的浏览器做编码处理,导致文件名编译错误无法下载
解决方案:
针对不同的浏览器做对应的文件名编码处理
………………………………省略部分代码………………………………………………
// 获取浏览器类型
String agent = request.getHeader("USER-AGENT");
if (agent.contains("MSIE")) {
// IE浏览器
fileName = URLEncoder.encode(fileName , "utf-8");
fileName = fileName .replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
fileName = new String(fileName .getBytes(), "ISO8859-1");
} else if (agent.contains("Chrome")) {
// google浏览器
fileName = URLEncoder.encode(fileName , "utf-8");
} else {
// 其它浏览器
fileName = URLEncoder.encode(fileName , "utf-8");
}
………………………………省略部分代码………………………………………………
备注:现在最新的浏览器基本上都支持utf-8格式的编码,现在可以统一用 URLEncoder.encode(fileName , “utf-8”) 进行编码;