Spring boot 读取resource目录下的文件
背景:最近做项目重构将以前的ssh + angular js架构,重构为spring boot + vue。项目是一个数据管理平台,后台涉及到多表关联查询,数据导入导出等。
问题:读取resource 目录下文件时出现路径找不到。
原因:spring boot 将项目打包为jar,使用 java - jar 包名 在服务器上运行。此时文件为打包文件,所以不能通过路径获取到文件。类似不能读取压缩包中的文件,必须先解压缩。结论:spring boot 中的文件只能通过流来进行读取。
可以通过以下方法进行流的读取。
InputStream in = this.getClass().getResourceAsStream("/files/aa.xls");
注: this.getClass().getResourceAsStream("");指向的路径问Resource跟目录,可以根据目录路径来写自己的文件路径。
注:如果文件路径或者文件名中存在中文,路径也会访问不到。所以文件路径和文件尽量使用英文。可以在输出文件的时候,修改文件名为中文。
返回给前端流,来下载文件,以excel文件为例。
String name = "呵呵.xls"
response.setContextType("application/vnd.ms-excel");
response.setHeader("Content-dispositon","inline;filename=" + new String(name.getBytes("GBK"),"ISO8859_1"));
进行下载。
梅花香自古寒来