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

    springmvc实现文件下载

    使用springmvc实现文件下载有两种方式,都需要设置response的Content-Disposition为attachment;filename=test2.png

    第一种可以直接向response的输出流中写入对应的文件流

    第二种可以使用 ResponseEntity<byte[]>来向前端返回文件

    一、使用response

    
    @RestController
    @RequestMapping("/download")
    public class DownloadController {
    
        @RequestMapping("/d1")
        public ResultVo<String> downloadFile(HttpServletResponse response){
    
            String fileName="test.png";
            try {
                //获取页面输出流
                ServletOutputStream outputStream = response.getOutputStream();
                //读取文件
                byte[] bytes = FileUtils.readFileToByteArray(new File("D:\my-study\test2.png"));
                //向输出流写文件
                //写之前设置响应流以附件的形式打开返回值,这样可以保证前边打开文件出错时异常可以返回给前台
                response.setHeader("Content-Disposition","attachment;filename="+fileName);
                outputStream.write(bytes);
                outputStream.flush();
                outputStream.close();
                return ResultVoUtil.success("success");
            } catch (IOException e) {
                return ResultVoUtil.error(e);
            }
    
        }
    }
    

    推荐使用这种方式,这种方式可以以json形式给前台返回提示信息。

    二、使用ResponseEntity

    
    @Controller
    @RequestMapping("/download2")
    public class DownloadController2 {
    
        private final static Logger logger= LoggerFactory.getLogger(CategoryDataController.class);
    
    
        @GetMapping("/d2")
        public ResponseEntity<byte[]> download2(){
            //获取文件对象
            try {
                byte[] bytes = FileUtils.readFileToByteArray(new File("D:\my-study\bill-admin\test2.png"));
                HttpHeaders headers=new HttpHeaders();
                headers.set("Content-Disposition","attachment;filename=test2.png");
                ResponseEntity<byte[]> entity=new ResponseEntity<>(bytes,headers,HttpStatus.OK);
                return entity;
            } catch (IOException e) {
                logger.error("下载出错:",e);
                return null;
            }
        }
    }
    
  • 相关阅读:
    libTIFF 图像读取与保存
    MarkDown写作之嵌入LaTeX和HTML
    R语言学习(一)前言
    Multi-Byte Character Set & Unicode Character Set
    C/C++ ShellExecuteEx调用exe可执行文件
    C/C++中相对路径与绝对路径以及斜杠与反斜杠的区别
    观察者模式
    责任链模式
    桥接模式
    void及void指针含义的深刻解析
  • 原文地址:https://www.cnblogs.com/chengxuxiaoyuan/p/12329145.html
Copyright © 2011-2022 走看看