Java后端向前端返回文件流实现下载功能的方法

 更新时间:2023年10月27日 09:48:39   作者:Spring羊  
这篇文章主要给大家介绍了关于Java后端向前端返回文件流实现下载功能的相关资料,Java后端可以通过调用接口返回文件流来实现文件传输功能,文中通过代码介绍的非常详细,需要的朋友可以参考下

引言

前端实现文件下载功能有多种方法,这里就不一一介绍,这里只介绍使用文件流下载的实现方法。

既然是文件流那就肯定需要给前端返回一堆二进制编码,作为后端就可以返回一个OutPutStream

后端可以使用Java中servlet提供的HttpServletResponse,核心步骤是要设置响应的数据类型,设置为某一类文件类型或二进制格式,以及响应头,然后用ServletOutputStream将文件以流的形式发送到前端。

直接上代码

response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");

response.setHeader("Content-Disposition", "attachment;filename=example.xls");

解释一下

  • 首先设置响应数据类型,你要下载什么文件就设置什么类型,如果你不知道文件是什么类型但可以肯定他不是文本文件,那就用下面的application/octet-stream表示,这样浏览器就知道这是一些二进制数据,就不会对其解析了。

  • 其次是设置响应头:

attachment: 表示响应内容应该被当作附件处理,会触发浏览器下载行为。

filename:参数指定下载文件的名称。上述代码则会让浏览器下载一个example.xls的文件。

这里给大家放一个链接,里面有常见的MIME类型,常见 MIME 类型列表 例如下图,png类型,pdf,ppt等等。

然后就是用流的形式发送给前端

ServletOutputStream outputStream = response.getOutputStream();
checkInfo.write(outputStream);
outputStream.flush();

这样后端就完成了把一个文件以文件流的形式传递给前端,前端发起请求就会触发浏览器的下载行为。

下面是完整代码

@GetMapping("/output/{classId}/{checkName}")
    public void checkToExcel(@PathVariable String checkName, @PathVariable String classId, HttpServletResponse response) {
        HSSFWorkbook checkInfo = checkExcelService.getCheckInfo(classId, checkName);
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + checkName + "签到统计表.xls");
        try {
            ServletOutputStream outputStream = response.getOutputStream();
            checkInfo.write(outputStream);
            outputStream.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

不知道有没有朋友像我一样,方法的返回值写的是流(例如ByteArrayOutputStream)这么写就错了

我之前在写这个程序时就是向前端返回一个流,结果下载的文件始终格式错误,浏览器收到的响应数据类型也一直是json,原因就在于没有使用response发送流,所以一定要使用response.getOutputStream()获取流,然后再去flush,这样前端才真正收到的是二进制文件流。

总结

到此这篇关于Java后端向前端返回文件流实现下载功能的文章就介绍到这了,更多相关Java文件流实现下载功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot实现单文件上传

    SpringBoot实现单文件上传

    这篇文章主要为大家详细介绍了SpringBoot实现单文件上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 灵活控制任务执行时间的Cron表达式范例

    灵活控制任务执行时间的Cron表达式范例

    这篇文章主要为大家介绍了灵活控制任务执行时间的Cron表达式范例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Java去除字符串空格的几种方法简单举例

    Java去除字符串空格的几种方法简单举例

    在Java中要去掉字符串中的空格,可以使用多种方法,这篇文章主要给大家介绍了关于Java去除字符串空格的几种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • spring boot环境抽象的实现方法

    spring boot环境抽象的实现方法

    在实际开发中,开发人员在编写springboot的时候通常要在本地环境测试然后再部署到Production环境,这两种环境一般来讲是不同的,最主要的区别就是数据源的不同。本文主要介绍了这两种,感兴趣的可以了解一下
    2019-04-04
  • 详解SpringBoot结合swagger2快速生成简单的接口文档

    详解SpringBoot结合swagger2快速生成简单的接口文档

    这篇文章主要介绍了详解SpringBoot结合swagger2快速生成简单的接口文档,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • @EnableWebMvc介绍和使用详细demo(最新推荐)

    @EnableWebMvc介绍和使用详细demo(最新推荐)

    @EnableWebMvc是SpringMVC的一个注解,用于启用SpringMVC框架的基本功能,它通常用于需要自定义SpringMVC配置或禁用SpringBoot自动配置的场景,本文给大家介绍了@EnableWebMvc介绍和使用详细demo,感兴趣的朋友一起看看吧
    2025-01-01
  • SpringBoot如何获取客户端的IP地址

    SpringBoot如何获取客户端的IP地址

    这篇文章主要介绍了SpringBoot如何获取客户端的IP地址问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • IDEA中使用Tomcat两种方式详细图文教程

    IDEA中使用Tomcat两种方式详细图文教程

    许多小伙伴原来都使用的eclipse进行Java代码的编写,在改用IDEA以后不会进行原来的一些配置,这篇文章主要介绍了IDEA中使用Tomcat两种方式的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2025-08-08
  • JAVA MyBatis入门学习过程记录

    JAVA MyBatis入门学习过程记录

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。这篇文章主要介绍了mybatis框架入门学习教程,需要的朋友可以参考下,希望能帮助到你
    2021-06-06
  • 使用spring通过aop获取方法参数和参数值

    使用spring通过aop获取方法参数和参数值

    这篇文章主要介绍了使用spring通过aop获取方法参数和参数值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论