zoukankan      html  css  js  c++  java
  • SpringMvc 文件下载 详解



      最近SSM 需要用到文件下载,以前没用过,在百度上找了好久发现没有一篇博客,对于此段代码进行详细讲解,

      这里是本人的个人总结,跟大家分享一下!!!不谢


    /**
    * 文件下载
    * ResponseEntity:该类实现响应头、文件数据(以字节存储)、状态封装在一起交给浏览器处理以实现浏览器的文件下载
    * <p>
    * ResponseEntity 也可作为响应数据使用 与@ResponseBody 注解功能相似
    * 但是ResponseEntity的优先级高于@ResponseBody
    * 在不是ResponseEntity的情况下才去检查有没有@ResponseBody注解。
    * 如果响应类型是ResponseEntity可以不写@ResponseBody注解,写了也没有关系。
    * <p>
    * 简单粗暴的讲,个人理解:
    * @ResponseBody可以直接返回Json结果,
    * @ResponseEntity不仅可以返回json结果,还可以定义返回的HttpHeaders和HttpStatus
    */
    @RequestMapping("/download")
    public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam String filename) throws IOException {
    //文件所在位置
    String downloadFilePath = request.getSession().getServletContext().getRealPath("/uploud");
    //获取要下载的文件
    File file = new File(downloadFilePath, filename);

    //http头信息 设置一些约束之类的东西
    HttpHeaders headers = new HttpHeaders();
    //设置编码 为了解决中文名称乱码问题
    String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");
    //将编码加到http头信息中
    headers.setContentDispositionFormData("attachment", downloadFileName);
    /**
    * MediaType:互联网媒介类型
    * contentType:具体请求中的媒体类型信息
    * MediaType: 很多常量 多种类型可设置
    * APPLICATION_OCTET_STREAM:二进制流数据(如常见的文件下载)
    *
    * 还有一种常见的:
    * MULTIPART_FORM_DATA: 需要在表单中进行文件上传时,就需要使用该格式
    */
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    /**
    * FileUtils.readFileToByteArray:读取文件到字节数组
    *
    * CREATED:201状态码:创建
    *
    * 简而言之,个人理解:
    * 创建/下载 一个根据http头信息约束的 字节数组(文件)
    */
    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);

    }
  • 相关阅读:
    caffe BUG
    Ubuntu安装低版本gcc
    OpenCV的CV :: findHomography运行时错误
    opencv中使用 SURF算法匹配的遇到的问题
    C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法 --转
    SIFI与surf
    opencv复习
    opencv老版本的IplImage使用
    python学习笔记-对象持久化保存与恢复
    Styles and Themes
  • 原文地址:https://www.cnblogs.com/lsy131479/p/9698932.html
Copyright © 2011-2022 走看看