java 解决火狐、谷歌、IE下载文件名乱码问题

一.工具类

package com.ahtcm.util;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;

public class BrowserEncodeSwitchUtil {

    public static String getContentDisposition(String fileName, HttpServletRequest request) throws UnsupportedEncodingException {
        String content_disposition = "";
        String userAgent = request.getHeader("User-Agent");
        if (userAgent.contains("Safari")) {
            byte[] bytes = fileName.getBytes("UTF-8");
            fileName = new String(bytes, "ISO-8859-1");
            content_disposition = String.format("attachment; filename="%s"", fileName);
        } else {
            fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
            content_disposition = "attachment;filename=" + fileName;
        }
        return content_disposition;
    }
}

二.调用该方法

@Override
    public void downloadExcelTpl(HttpServletRequest request, HttpServletResponse response) {
        FileInputStream is = null;
        try{
            String fileName = "居民病历导入模板.xls";
            String contentDisposition = BrowserEncodeSwitchUtil.getContentDisposition(fileName, request);
            response.setHeader("Content-Disposition", contentDisposition);
            /*获取文件的路径*/
            String realPath = request.getSession().getServletContext().getRealPath("/static/居民病历导入模板.xls");
            /*读取文件*/
            is=new FileInputStream(realPath);
            IOUtils.copy(is,response.getOutputStream());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(is !=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
原文地址:https://www.cnblogs.com/wwjj4811/p/12585458.html