Springboot项⽬打war包docker包不到resource下静态
资源的解决⽅案
前⼀段时间遇到⼀个问题,是关于读取项⽬中⽂件资源的问题。我是⼀个maven⼯程我把⼀张照⽚放到resource下⾯,然后在本地读取的时候可以读取到,但是⼀旦打成WAR包以后就总是包不到⽂件资源错误。我的war包是springboot打的war 包,是内嵌的tomcat所以不解压,然后系统去路径的时候会发现是个WAR包,⽽图⽚在WAR包内,所以不到。
为了解决这个问题,我⾛了好多弯路,⼀直在路径上花费时间。
⼀开始使⽤修改配置⽂件的⽅式:
# 配置静态资源访问前缀
spring.mvc.static-path-pattern=*/**
# 配置静态资源路径,默认配置失效
发现并不⾏,⽆法解析出相对路径。
最后我是通过系统运⾏去读取⽂件源,然后将⽂件流存储在服务器上,存⼀个临时⽂件,然后系统再去读这个临时⽂件,然后就读取到这个⽂件了。
其实就是java数据流转换为⽂件
解题思路是上述那样的。接着就是代码了
调⽤代码如下
File f = new File("/tmp/image1.jpg"));//临时图⽚存在的位置
if (!f.exists()) {
springboot其实就是springInputStream in = Class().getResourceAsStream("/templates/emailImg.png");//图⽚在项⽬中的位置
FileUtil.inputstreamtofile(in, f);
}
// 如果需要使⽤⽂件,这个/tmp/image1.jpg就是临时⽂件路径
转换⽅法代码如下
public static void inputstreamtofile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ad(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
需要注意⼀下, 放置临时⽂件的路径可能是在docker容器中的,⽽不是在服务器上. 所以需要先把前⾯的路径mkdirs, 然后
再f.createNewFile;, ⼀下再调⽤FileUtil.inputstreamtofile才可以。
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。如果你想了解更多相关内容请查看下⾯相关链接
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论