Python 官方文档:入门教程 => 点击学习
目录如何通过流返回文件controller类如下工具类DownLoadUtils如下以流的方式直接返回如何通过流返回文件 本人的文件是放在resource/templates目录下,
本人的文件是放在resource/templates目录下,截图如下
@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);
}
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);
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: Springboot如何通过流返回文件
本文链接: https://www.lsjlt.com/news/142954.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0