关于java文件下载时文件名乱码问题的处理

关于java文件下载文件名乱码问题的处理: 

String fileName = "下载的文件名"; 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");
}
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


IE8 : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E)


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 map = new HashMap();
   map.put("id", id);
   List 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();
}
   
}



你可能感兴趣的:(关于java文件下载时文件名乱码问题的处理)