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文件流实现下载功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Maven项目打Jar包并添加依赖步骤详解

    Maven项目打Jar包并添加依赖步骤详解

    这篇文章主要介绍了Maven项目打Jar包并添加依赖步骤详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Java Process.waitFor()方法详解

    Java Process.waitFor()方法详解

    这篇文章主要介绍了Java Process.waitFor()方法详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Cloud 专题之Sleuth 服务跟踪实现方法

    Spring Cloud 专题之Sleuth 服务跟踪实现方法

    这篇文章主要介绍了Spring Cloud 专题之Sleuth 服务跟踪,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • JavaFX实现简易时钟效果

    JavaFX实现简易时钟效果

    这篇文章主要为大家详细介绍了JavaFX实现简易时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • java实现潜艇大战游戏源码

    java实现潜艇大战游戏源码

    潜艇大战游戏相信大家都玩过,是一款非常有趣的小游戏,那么基于代码是如何实现的呢?今天小编给大家带来一篇教程帮助大家学习java实现潜艇大战游戏,感谢的朋友一起看看吧
    2021-06-06
  • Java使用junit框架进行代码测试过程详解

    Java使用junit框架进行代码测试过程详解

    单元测试就是针对最小的功能单元编写测试代码,Junit是使用Java语言实现的单元测试框架,它是开源的,Java开发者都应当学习并使用Junit编写单元测试。本文就来讲讲Junit框架的使用教程,需要的可以参考一下
    2023-02-02
  • Java代码实现微信页面滚动防露底(核心代码)

    Java代码实现微信页面滚动防露底(核心代码)

    这篇文章主要介绍了Java代码实现微信页面滚动防露底的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Java empty、null、blank的区别小结

    Java empty、null、blank的区别小结

    本文主要介绍了Java empty、null、blank的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 关于Java中避免空指针的方法

    关于Java中避免空指针的方法

    这篇文章主要介绍了关于Java中避免空指针的方法,空指针异常就是我们在对空对象进行的任何操作都会报空指针异常,所谓的指针,就是java中的对象的引用,比如String s;这个就是指针,需要的朋友可以参考下
    2023-07-07
  • 基于springboot i18n国际化后台多种语言设置的方式

    基于springboot i18n国际化后台多种语言设置的方式

    这篇文章主要介绍了基于springboot i18n国际化后台多种语言设置的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论