Springboot如何通过流返回文件

 更新时间:2022年03月18日 09:43:49   作者:一个想努力学技术的程序员  
这篇文章主要介绍了Springboot如何通过流返回文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

如何通过流返回文件

本人的文件是放在resource/templates目录下,截图如下

controller类如下

    @GetMapping(value = "/downfile")
    public void download(HttpServletResponse response) throws IOException {
        String fileName = "template.xlsx";
        // 设置信息给客户端不解析
        String type = new MimetypesFileTypeMap().getContentType(fileName);
        // 设置contenttype,即告诉客户端所发送的数据属于什么类型
        response.setHeader("Content-type",type);
        // 设置编码
        String code = new String(fileName.getBytes("utf-8"), "iso-8859-1");
        // 设置扩展头,当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
        response.setHeader("Content-Disposition", "attachment;filename=" + code);
        response.setContentType("application/octet-stream;charset=ISO8859-1");
        response.addHeader("Pargam", "no-cache");
        response.addHeader("Cache-Control", "no-cache");
        DownLoadUtils.download(fileName, response);
    }

工具类DownLoadUtils如下

public class DownLoadUtils { 
    public static void download(String filename, HttpServletResponse res) throws IOException {
        // 发送给客户端的数据
        // 读取filename
        ClassPathResource classPathResource = new ClassPathResource("templates/"+filename);
        long length = classPathResource.getFile().length();
        res.addHeader("Content-Length",String.valueOf(length));
        OutputStream outputStream = res.getOutputStream();
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        InputStream inputStream =classPathResource.getInputStream();
        bis = new BufferedInputStream(inputStream);
        int i = bis.read(buff);
        while (i != -1) {
            outputStream.write(buff, 0, buff.length);
            outputStream.flush();
            i = bis.read(buff);
        }
        bis.close();
        outputStream.close();
    }
}

注意点

response.addHeader("Content-Length",String.valueOf(file.length()));

如果不加这句代码,下载下来的文件会 在打开前提示修复,文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配

以流的方式直接返回

import java.io.FileReader;
import java.io.InputStream;
import java.util.Properties;
/*
 */
public class Reflect {
    public static void main(String[] args) throws Exception{
       //获取一个文件的绝对路径!!!
        // 这种是先获得绝对路径然后在转换成流。
//        String path = Thread.currentThread().getContextClassLoader()
//                .getResource("classinfo2.properties").getPath();
//        FileReader reader = new FileReader(path);
        //下面这种是直接用流的方式返回。
        InputStream reader = Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("classinfo2.properties");
        Properties pro = new Properties();
        pro.load(reader);
        reader.close();
        //通过key获取value。
        String className = pro.getProperty("className");
        System.out.println(className);
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • SpringBoot整合高德地图实现天气预报功能

    SpringBoot整合高德地图实现天气预报功能

    在当今数字化时代,天气预报功能在众多应用中扮演着重要角色,通过整合高德地图提供的天气API,我们可以轻松地在自己的SpringBoot项目中实现这一功能,本文将详细介绍如何在SpringBoot项目中整合高德地图的天气预报功能,感兴趣的小伙伴跟着小编一起来看看吧
    2025-03-03
  • ThreadPoolExecutor线程池的使用方法

    ThreadPoolExecutor线程池的使用方法

    这篇文章主要为大家详细介绍了ThreadPoolExecutor线程池的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Vue中computed计算属性和data数据获取方式

    Vue中computed计算属性和data数据获取方式

    这篇文章主要介绍了Vue中computed计算属性和data数据获取方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 浅析Java虚拟机详解之概述、对象生存法则

    浅析Java虚拟机详解之概述、对象生存法则

    这篇文章主要介绍了Java虚拟机详解之概述、对象生存法则,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 搭建maven私有仓库的方法实现

    搭建maven私有仓库的方法实现

    Maven是一个流行的Java项目管理工具,它可以帮助我们管理项目的构建、报告和文档,本文主要介绍了搭建maven私有仓库的方法实现,感兴趣的可以了解一下
    2023-05-05
  • Mybatis-plus原生pages分页未生效的解决方案

    Mybatis-plus原生pages分页未生效的解决方案

    本文主要介绍了Mybatis-plus原生pages分页未生效的解决方案,包含介绍了未生效的5种原因以及解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • JAVA 开发之用静态方法返回类名的实例详解

    JAVA 开发之用静态方法返回类名的实例详解

    这篇文章主要介绍了JAVA 开发之用静态方法返回类名的实例详解的相关资料,这里主要说明使用异常来得到类名,希望能帮助到大家,需要的朋友可以参考下
    2017-08-08
  • Java毕业设计实战之校园一卡通系统的实现

    Java毕业设计实战之校园一卡通系统的实现

    这是一个使用了java+Springboot+Maven+mybatis+Vue+mysql+wd开发的校园一卡通系统,是一个毕业设计的实战练习,具有校园一卡通系统该有的所有功能,感兴趣的朋友快来看看吧
    2022-01-01
  • IDEA Ui设计器JFormDesigner 永久激活插件+注册机(亲测一直在用)

    IDEA Ui设计器JFormDesigner 永久激活插件+注册机(亲测一直在用)

    这篇文章主要介绍了IDEA Ui设计器JFormDesigner 永久激活----插件+注册机 自己一直在用的版本和注册机,非常不错,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 解决ApplicationContext获取不到Bean的问题

    解决ApplicationContext获取不到Bean的问题

    这篇文章主要介绍了解决ApplicationContext获取不到Bean的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06

最新评论