微软向兼容性靠拢,使得IE11浏览器标识变成Mozilla,导致处理下载文件时出现乱码问题,但不无解决方法,
查看请求发现IE11的标识 rv:11,这里区分了IE11所以
StringUtils.contains(userAgent, "rv:11")即可解决问题
ResponseUtill.download(request, response, "人员管理基本信息.xls", "multipart/form-data");
/**
* 文件下载.
*
* <br>��param: request
* <br>��param: response
* <br>��param: name 文件名.
* <br>��param: contentType 文件类型.
* @author chengyuebin
*/
public static void download(HttpServletRequest request,
HttpServletResponse response,
String name,
String contentType) throws Exception {
// 最终返回给浏览器的文件名.
String finalFileName = null;
final String userAgent = request.getHeader("USER-AGENT");
// IE浏览器.
if(StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "rv:11")) {
finalFileName = URLEncoder.encode(name,"UTF8");
}
// Google,火狐浏览器
else if(StringUtils.contains(userAgent, "Mozilla")) {
finalFileName = new String(name.getBytes(), "ISO8859-1");
}
// 其他浏览器.
else{
finalFileName = URLEncoder.encode(name,"UTF8");
}
// 告诉浏览器用什么软件可以打开此文件.
response.setHeader("content-Type", contentType);
// 下载文件的默认名称.
response.setHeader("Content-Disposition", "attachment;filename=" + finalFileName);
// 编码.
response.setCharacterEncoding("UTF-8");
Resource resource = new ClassPathResource(name);
IOUtils.copy(resource.getInputStream(), response.getOutputStream());
response.flushBuffer();
}
}