欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Springboot如何通过流返回文件

时间:2022-07-10 09:40:11|栏目:JAVA代码|点击:

如何通过流返回文件

本人的文件是放在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);
    }
}

上一篇:Java制作验证码的完整实例代码

栏    目:JAVA代码

下一篇:mybatis-plus复合主键的使用

本文标题:Springboot如何通过流返回文件

本文地址:http://www.codeinn.net/misctech/207396.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有