response.setHeader("Content-Disposition", "attachment; " + getEncodingFileName(headerUserAgent, fileName));
private String getEncodingFileName(String userAgent, String fileName) throws IOException {
if (StringUtil.isNotBlank(userAgent) && StringUtil.isNotBlank(fileName)) {
String newEncodingFileName = URLEncoder.encode(fileName, "UTF-8");
String encodingFileName = "";
userAgent = userAgent.toLowerCase();
// IE,Chrome浏览器,采用URLEncoder编码
if (userAgent.indexOf("msie") != -1 || userAgent.indexOf("chrome") != -1) {
encodingFileName = "filename=\"" + newEncodingFileName + "\"";
}
// Opera, FireFox浏览器采用filename*
else if (userAgent.indexOf("opera") != -1 || userAgent.indexOf("firefox") != -1) {
encodingFileName = "filename*=UTF-8''" + newEncodingFileName;
}
// Safari浏览器,只能采用ISO编码的中文输出
else if (userAgent.indexOf("version") != -1) {
encodingFileName = "filename=\"" + new String(fileName.getBytes("UTF-8"), "ISO8859-1") + "\"";
}
return encodingFileName;
}
return "";
}