关于java文件下载文件名乱码问题的处理:
String fileName = "下载的文件名"; String userAgent = request.getHeader("User-Agent");
if (userAgent.contains("MSIE")||userAgent.contains("Trident")) {
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
} else {
//非IE浏览器的处理:
fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
}
response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setCharacterEncoding("UTF-8");
这样子就可以了! 顺便贴一下:各个浏览器关于request.getHeader("User-Agent"); 的输出内容: chrome : Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36
FIREFOX:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0
IE9 : Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
IE10 : Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:10.0) like Gecko
IE11 : Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
360 极速模式:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36
360 的IE9模式:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
//【示例后台代码如下:】----------------------------------------------------------------------------------------
/**
* 附件下载
* 返回void
* @throws IOException
*/
@RequestMapping(value = "/downLoadFile")
public void downLoadFile(HttpServletRequest request,HttpServletResponse response,HttpSession session){
String id = request.getParameter("id");
String fileName = request.getParameter("fileName");
System.out.println("附件id:"+id+"; 超链接下载附件名为:"+fileName);
Map<String, String> map = new HashMap<String,String>();
map.put("id", id);
List<HistoryFile> historyFileList = iHistoryZysfService.selectHistoryFile(map);
if(historyFileList == null || historyFileList.size() < 1)
{
return;
}
HistoryFile historyFile = historyFileList.get(0);
try
{
String userAgent = request.getHeader("User-Agent");
//针对IE或者以IE为内核的浏览器:
if (userAgent.contains("MSIE")||userAgent.contains("Trident")) {
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
}else {
//非IE浏览器的处理:
fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
}
byte[] bytes = historyFile.getFsdata_data();//测试3000附件
response.reset();
response.setHeader("Content-Disposition", "attachment;filename=\""+fileName+"\"");
response.setHeader("Content-Length",""+bytes.length);
response.setContentType("application/octet-stream;charset=UTF-8");
ServletOutputStream out = response.getOutputStream();
out.write(bytes);
out.flush();
out.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}