zoukankan      html  css  js  c++  java
  • 下载文件时文件名是中文,文件名丢失或者乱码的问题

    解决方案

      针对不同浏览器类型,对文件名字做编码处理 Firefox (Base64) ;IE、Chrome ... 使用的是URLEncoder

    public class DownloadServlet2 extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //获取文件在tomcat下的路径
            String path = getServletContext().getRealPath("download/测试文档.txt");
    
            String fileName = "测试文档.txt";
            String clientType = req.getHeader("User-Agent");
            System.out.println(clientType);
            if(clientType.contains("Firefox")){
                fileName = base64EncodeFileName(fileName);
            }else{
                //IE ,或者  Chrome (谷歌浏览器) ,
                //对中文的名字进行编码处理
                fileName = URLEncoder.encode(fileName,"UTF-8");
            }
            //让浏览器收到这份资源的时候, 以下载的方式提醒用户,而不是直接展示
            resp.setHeader("Content-Disposition", "attachment; filename="+fileName);
            
            //转化成输入流
            InputStream is = new FileInputStream(path);
            OutputStream os = resp.getOutputStream();
            
            int len = 0;
            byte[] bts = new byte[1024];
            while ((len = is.read(bts)) != -1) {
                os.write(bts, 0, len);
            }
            os.close();
            is.close();
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    
        public String base64EncodeFileName(String fileName) {
            BASE64Encoder base64Encoder = new BASE64Encoder();
            try {
                return "=?UTF-8?B?"
                        + new String(base64Encoder.encode(fileName
                                .getBytes("UTF-8"))) + "?=";
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    }

  • 相关阅读:
    一个简单的MVVM雏形
    sass学习笔记1
    col标签的相关实验
    背景半透明rgba最佳实践
    angular性能优化心得
    环视非捕获分组
    5月23日Google就宣布了Chrome 36 beta
    浏览器 user-agent 字符串的故事
    迷你MVVM框架 avalonjs 沉思录 第3节 动态模板
    迷你MVVM框架 avalonjs 1.3.1发布
  • 原文地址:https://www.cnblogs.com/qf123/p/10059023.html
Copyright © 2011-2022 走看看