zoukankan      html  css  js  c++  java
  • SpringMVC文件下载

    基于此篇文章中的一些没有注释的相关问题,今天进行SpringMVC的文件下载的更新:

    新方法:

    1.控制层,新建一个方法,返回值类型为ResponseEntity<byte[]>的方法,并在其函数的后面添加对应的后台需要处理的参数,比如可以传递FIleName

     /**
         * 文件下载
         *
         * @param id
         * @return
         */
        @GetMapping("/download/")
        public ResponseEntity<byte[]> download(@PathVariable("id") String id) throws IOException {
            File file = xxxService.buildXlsFileById(id);
            return ResponseUtils.buildResponseEntity(file);
        }
    

    2. 编写service返回File文件对象,从Service层中查询数据库操作,并查询文件真正的路径位置,然后返回File对象

    public File buildXlsById(String id){
           //do something to find this file
           File file=new File("1.txt");
           return file;
    }  
    

     3. 编写ResponseUtils中的相关方法

    /**
         * 构建下载类
         * @param file
         * @return
         * @throws IOException
         */
        public static ResponseEntity<byte[]> buildResponseEntity(File file) throws IOException {
            byte[] body = null;
            //获取文件
            InputStream is = new FileInputStream(file);
            body = new byte[is.available()];
            is.read(body);
            HttpHeaders headers = new HttpHeaders();
            //设置文件类型
            headers.add("Content-Disposition", "attchement;filename=" + file.getName());
            //设置Http状态码
         HttpStatus statusCode = HttpStatus.OK;
            //返回数据
         ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
            return entity;
        }
    

      

      4.编写相对应得URL即可

    老方法

    /**
         * 文件下载
         * @Description: 
         * @param fileName
         * @param request
         * @param response
         * @return
         */
        @RequestMapping("/download")
        public String downloadFile(@RequestParam("fileName") String fileName,
                HttpServletRequest request, HttpServletResponse response) {
            if (fileName != null) {
                String realPath = request.getServletContext().getRealPath(
                        "WEB-INF/File/");
                File file = new File(realPath, fileName);
                if (file.exists()) {
                    response.setContentType("application/force-download");// 设置强制下载不打开
                    response.addHeader("Content-Disposition",
                            "attachment;fileName=" + fileName);// 设置文件名
                    byte[] buffer = new byte[1024];
                    FileInputStream fis = null;
                    BufferedInputStream bis = null;
                    try {
                        fis = new FileInputStream(file);
                        bis = new BufferedInputStream(fis);
                        OutputStream os = response.getOutputStream();
                        int i = bis.read(buffer);
                        while (i != -1) {
                            os.write(buffer, 0, i);
                            i = bis.read(buffer);
                        }
                    } catch (Exception e) {
                        // TODO: handle exception
                        e.printStackTrace();
                    } finally {
                        if (bis != null) {
                            try {
                                bis.close();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                        if (fis != null) {
                            try {
                                fis.close();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
            return null;
        }
    

      

  • 相关阅读:
    利用dockerfile定制镜像
    发布Docker 镜像到dockerhub
    Docker 停止容器
    133. Clone Graph
    132. Palindrome Partitioning II
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    127. Word Ladder
  • 原文地址:https://www.cnblogs.com/lonecloud/p/5990060.html
Copyright © 2011-2022 走看看