zoukankan      html  css  js  c++  java
  • springmvc通过ResponseEntity实现文件下载

    在springmvc中实现文件下载一般都是借助HttpServletResponse的getOutputStream()方法实现的,除此之外还可以通过ResponseEntity实现:

     	@RequestMapping(value = "/downloadxx.do", method = RequestMethod.GET)
        public ResponseEntity<InputStreamResource> downloadxx(HttpServletRequest request, HttpServletResponse response) throws IOException {
            String filePath = "/download/xx.zip";
            ClassPathResource file = new ClassPathResource(filePath);
            // 文件名编码,解决乱码问题
            String fileName = file.getFilename();
            // 解决文件名乱码问题
            // String fileName = URLEncoder.encode(file.getFilename(), StandardCharsets.UTF_8.toString());
            String userAgentString = request.getHeader("User-Agent");
            String browser = UserAgent.parseUserAgentString(userAgentString).getBrowser().getGroup().getName();
            if (browser.equals("Chrome") || browser.equals("Internet Exploer") || browser.equals("Safari")) {
                fileName = URLEncoder.encode(fileName, "utf-8").replaceAll("\+", "%20");
            } else {
                fileName = MimeUtility.decodeText(fileName); // encodeWord(fileName);
            }
    
            HttpHeaders headers = new HttpHeaders();
            headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
            headers.add("Content-Disposition", String.format("attachment; filename="%s"", fileName));
            headers.add("Pragma", "no-cache");
            headers.add("Expires", "0");
            return ResponseEntity.ok().headers(headers).contentLength(file.contentLength())
                .contentType(MediaType.parseMediaType("application/octet-stream"))
                .body(new InputStreamResource(file.getInputStream()));
        }
    
    一颗安安静静的小韭菜。文中如果有什么错误,欢迎指出。
  • 相关阅读:
    linux清理缓存
    HTMl5的sessionStorage和localStorage
    jQueryValidation插件API 学习
    notepad++去空格空行技巧
    关于前端的一些疑问
    ios上传图片遇见了一个TimeoutError(DOM Exception 23)异常
    js不执行的问题
    input type=file 怎么样调取用户手机照相机
    在调用方法给安卓传参遇到的问题
    canvas压缩图片成base64,传到后台解码需要注意的问题
  • 原文地址:https://www.cnblogs.com/c-Ajing/p/13448383.html
Copyright © 2011-2022 走看看