SpringBoot下载文件

SpringBoot下载文件文件下载在使用 Spring 的文件下载和上传功能时 可以直接向前端返回 ResponseEnti lt byte gt 类型的数据 功能代码如下 publicRespon lt byte gt fileDownload HttpServletR Stringurl StringfileNa throwsExcept

文件下载

在使用Spring的文件下载和上传功能时,可以直接向前端返回ResponseEntity

类型的数据。功能代码如下:

 public ResponseEntity<byte[]> fileDownload(HttpServletRequest request, String url, String fileName) throws Exception { 
    InputStream in = new FileInputStream(new File(url)); byte[] body = new byte[in.available()]; in.read(body); fileName = new String(fileName.getBytes("gbk"), "iso8859-1") + ".exe"; //设置文件名 HttpHeaders headers = new HttpHeaders(); headers.add("Content-Disposition", "attachment;filename=" + fileName); HttpStatus status = HttpStatus.OK; ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(body, headers, status); return responseEntity; } 

以上代码根据使用中的不同需要对应替换。但是,在调用结束后浏览器确实下载了文件,但是打开发现出现乱码的情况,并且文件会比真实文件稍大一些。

解决乱码

在使用SpringMVC时,我们注意到出现这种问题的原因是JSON数据在比特流传递的时候的编码解码问题导致了乱码的出现。我们只需要配置ByteArrayHttpMessageConverter便可以解决。但是SpringBoot没有xml配置文件,我们应该如何操作呢?

  1. 在SpringBoot的配置文件中添加ByteArrayHttpMessageConverte的Bean。
 @Bean public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() { 
    return new ByteArrayHttpMessageConverter(); } 
  1. 在注册转换器configureMessageConverters方法中添加该Bean。
 @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
    converters.add(byteArrayHttpMessageConverter()); converters.add(...); //其他的转换器 } 

前端测试

在Controller中做好RequestMapping的方法之后,将比特流返回给前端,前端直接打开新的网页开始下载。

window.open("/webApi/webuser/download/" + downloadName); 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220028.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午9:24
下一篇 2026年3月17日 下午9:25


相关推荐

  • AB PLC_RSlogix5000 QB1B上电变量初始化

    AB PLC_RSlogix5000 QB1B上电变量初始化ABPLC RSlogix5000Q 上电初始化 ABPLC1769 有断电保持的功能 这个功能可以设置吗 需要就打开 或者关闭 比如有一个点是输出状态 这个情况下断电了 下次通电他会恢复这个点的状态 但我们可能不需要哈处理方法 需要在 CPU 从 program 到 run 的第一个扫描周期时 进行预处理 把需要清零的点全部 otu 一次 放到 power uphandler 上电初始化的程序里面 初始化完毕后不再执行先加 program 再加 routine

    2026年3月19日
    2
  • vscode 前端最佳插件配置

    vscode最佳配置配置说明详解vscode配置内容在最后,已附上editor是针对vscode的风格设置例如tabSize:一个tab等于2个空格,行高为24pxworkbench是针对vscode的主题设置例如iconTheme(图标风格):使用插件vscode-great-icons(需搜索安装)例如color…

    2022年4月6日
    68
  • java大数据培训[通俗易懂]

    java大数据培训[通俗易懂]从近几年的发展来看,大数据已经可以说是当之无愧的热门了,大数据在越来越多的行业实现落地,也就需要更多的专业人才来支持。很多人都看好大数据行业,想要转向大数据发展,其中也不乏Java一类的技术开发人员。今天的大数据课程学习培训分享,我们来聊聊Java转大数据的那些事儿。因为大数据本身也与Java开发存在着紧密的关联性,行业当中现有的大数据从业者,其中也不乏Java资深开发者,在实际的工作当中,抓住大数据机遇,从Java开发转向了大数据开发,薪资待遇和发展空间,都有了明显的增长和拓宽。Java转大数

    2022年8月30日
    8
  • traceview使用总结

    traceview使用总结文章目录 1 traceview 的用途 2 生成 trace 文件的三种方式 1 代码生成 2 使用 androidstudi 生成 3 DDMS 生成 3 使用 traceview 打开 trace 文件 4 分析 trace 文件 1 traceview 的用途 traceview 是 Androidsdk 中的一个工具 用于分析计算性能 跟踪方法耗时导致的卡顿问题 它将 traceview 文件转为图形 直观的反应出代码的执行

    2026年3月18日
    2
  • 【java篇】Java到底是值传递还是引用传递?

    【java篇】Java到底是值传递还是引用传递?JVM 划分了很多块区域 我们创建的对象就放在堆中 而基本数据类型和局部变量都放在栈中 当传递基本数据类型时 是将数据创建了一个副本传递到方法中 所以实参不会受到形参修改的影响 如图

    2026年3月17日
    2
  • 金融大模型应用现状及未来趋势研究:国内外对比分析

    金融大模型应用现状及未来趋势研究:国内外对比分析

    2026年3月13日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号