Springboot如何通过流返回文件

网友投稿 1332 2022-10-19

Springboot如何通过流返回文件

Springboot如何通过流返回文件

目录如何通过流返回文件controller类如下工具类DownLoadUtils如下以流的方式直接返回

如何通过流返回文件

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

controller类如下

@GetMappiEesXSHng(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");

EesXSH // 设置扩展头,当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",StringEesXSH.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);

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Tableau server日常维护1.0】Tableau server 如何在项目里面自定义的添加图片?满足视觉效果
下一篇:中国科学院大学教务抢课程序 多线程暴力版
相关文章

 发表评论

暂时没有评论,来抢沙发吧~