文件下载文件名乱码问题

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

String fileName = "下载的文件名"; String userAgent = request.getHeader("User-Agent"); 

//针对IE或者以IE为内核的浏览器:
if (userAgent.contains("MSIE")||userAgent.contains("Trident")||userAgent.contains("Edge")) {
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<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();
        }
        
    }

参考:https://blog.youkuaiyun.com/weixin_40423597/article/details/80586549

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值