专栏首页个人随笔SpringMvc 文件下载 详解

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);

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 房上的猫:StringBuffer类

    一.使用StringBuffer类  StringBuffer类位于java.lang包中,是String类的增强类  步骤:   1.声明StringBuff...

    房上的猫
  • 房上的猫:人机猜拳项目

    1.首先定义成员变量: int select1;// 人 选择 int select2;// 角色 选择 String choice1;...

    房上的猫
  • 使用集合组织相关数据

    一.集合概述   特点:可动态扩容   1.ArrayList(数组列表)     类似于数组,可动态维护     命名空间:System.Collection...

    房上的猫
  • 【Emgu】一起学EmguCV(二)Image和Matrix的使用

      本文链接:https://www.cnblogs.com/bomo/archive/2013/03/28/2986573.html

    zls365
  • python对文件进行读写操作

    py3study
  • 推荐几款快速管理 Kubernetes 多集群环境的神器

    Kubernetes 生态在很多企业广泛应用的当下,相信很多运维和开发人员都会同时管理和维护多个 Kubernetes 集群,比如:开发环境、测试环境、预发布环...

    iMike
  • 如何快速爬取B站全站视频信息

    專 欄 ❈陈键冬,Python中文社区专栏作者,知乎专栏:尽瞎扯 GitHub: https://github.com/chenjiandongx ❈ B站我...

    Python中文社区
  • 查看 ceph 集群中的认证用户及相关的 key

    [root@node1 ~]# ceph auth list installed auth entries:

    院长技术
  • 盘点“BAT+3M”五大互联网巨头2014投资布局

    虽然过年,我们也会为您持续分享,2015的大数据文摘内容将更加丰富、有料、有趣,值得期待!同时,我们也希望有能力、愿分享的你加入文摘,和我们一起创造价值。

    大数据文摘
  • 在Debian中打造属于自己的deb包

    问题:如果你要在Debian系统中发布一款软件或者一个包,该如何做呢?如果你的项目中有各种二进制包,该如何维护呢?如果你自己做了一款小小的实用软件,该如何与朋友...

    ternturing

扫码关注云+社区

领取腾讯云代金券