• SpringMVC 文件下载


    第一种方法使用 HttpMessageConverter 下的 ResponseEntity<> 实现。

    @RequestMapping("/testHttpMessageDown")
        public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException{
             String filename = "123.jpg";
                //根据不同浏览器处理下载时文件名乱码问题
                if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {  
                    filename = URLEncoder.encode(filename, "UTF-8");  
                } else {  
                    filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");  
                }
            byte[] body = null;
            InputStream is = request.getSession().getServletContext().getResourceAsStream("/upload/user/JSON.jpg");
            body = new byte[is.available()];
            is.read(body);
            HttpHeaders headers = new HttpHeaders();
            headers.add("Content-Disposition", "attchement;filename=" + filename);
            HttpStatus statusCode = HttpStatus.OK;
            ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
            return entity;
        }

    第二种方法是常用的文件下载方式

    @RequestMapping("/testFileDown")
        public void fileDownload(HttpServletRequest request, HttpServletResponse response) throws IOException{
            String filename = "这是中文名称123abc()()-234十几分.pdf";
            //根据不同浏览器处理下载时文件名乱码问题
            if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {  
                filename = URLEncoder.encode(filename, "UTF-8");  
            } else {  
                filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");  
            }
    //        response.setContentType("multipart/form-data");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-Disposition", "attachment;fileName="+filename);
            InputStream is = request.getSession().getServletContext().getResourceAsStream("/upload/中文名称的文件名.pdf");
            OutputStream os = response.getOutputStream();
            byte[] b = new byte[1024];
            int length = 0;
            while((length = is.read(b)) > 0){
                os.write(b);
            }
            os.flush();
            os.close();
            is.close();
        }
  • 相关阅读:
    Java的基本数据类型及其封装类
    牛客寒假3-A |dp走格子
    牛客寒假1-I nico和niconiconi| 字符串 线性dp
    牛客寒假2-C算概率| 概率dp
    牛客寒假6-B重排列| dp计数
    牛客寒假6-B图| 统计环中结点个数,计算最大链长
    三分法 求最大值最小|牛客寒假5-B牛牛战队的比赛地
    P3382|三分法模板
    思维题(取模)| CF#615Div3 D.MEX maximizing
    树的直径| CF#615Div3 F. Three Paths on a Tree
  • 原文地址:https://www.cnblogs.com/yjtx/p/4442245.html
Copyright © 2020-2023  润新知