原文:https://blog.youkuaiyun.com/duangecho/article/details/80258300
很多的项目都要上传图片那些,然后通过打包jar包或者war包发布到服务器上,我们不可能把上传图片的文件夹放在jar包或者war包里面,那样会越来越大。所以有了下面的配置,其他框架都好说可以把文件放在tomact下,但是springboot项目是内置tomact所以会有一点的小麻烦。
如果你的项目只要在本地上运行可以参考:https://blog.youkuaiyun.com/duangecho/article/details/80099810
如果你的项目要打成jar包放到服务器上请参考如下
进入主题,配置如下:
在springboot项目中的application.properties配置文件下,我们通常会规定一个tomact的虚拟路径,如下:
server.tomcat.basedir=logistics/tomcat
此虚拟路径会在你把springboot项目打成jar包运行后在你的jar包同级目录下产生一个logistics目录。所以我把我要上传的文件的全部放在这个文件夹目录下
springboot项目打包的jar包
在image文件放入你要上传图片的的文件夹
这是我要上传文件的一些文件夹
然后在springboot启动类中添加过滤器,这里自己踩了很多坑,一遍一遍重新打jar,然后运行,网上许多的配置大多只能添加一个固定的文件路径然后映射成静态资源路径:
public class DemoSpringbootWebApplication extends WebMvcConfigurerAdapter{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
File path = null;
try {
path = new File(ResourceUtils.getURL("classpath:").getPath());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String gitPath=path.getParentFile().getParentFile().getParent()+File.separator+"logistics"+File.separator+"uploads"+File.separator;
registry.addResourceHandler("/uploads/**").addResourceLocations(gitPath);
registry.addResourceHandler("/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
super.addResourceHandlers(registry);
}
public static void main(String[] args) {
SpringApplication.run(DemoSpringbootWebApplication.class, args);
}
}
这里是获取你放项目jar的路径,这有个很大的漏洞就是你项目在你开发工具上运行时和你打成jar包的获取路径不同,在项目上运行时不用返回两次父级目录,而打成jar包运行后获取的jar包的路径要如下的方法,并且打成jar包后获取的根目录会在目录前面加上file:/你项目的路径
String gitPath=path.getParentFile().getParentFile().getParent()+File.separator+"logistics"+File.separator+"uploads"+File.separator;
这里是映射外部文件的代码:
registry.addResourceHandler("/uploads/**").addResourceLocations(gitPath);
这里是映射你项目的静态资源的:
registry.addResourceHandler("/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
这里需要注意两个映射的访问路径不能相同我就是在这里改了很久。
其实这里就是项目启动时获取jar包的绝对路径,请注意是绝对路径,然后通过拼接形式访问到你存放文件的目录。可能不同的项目获取文件路径有差异但是都是这个原理:取得你存放文件的绝对路径然后映射成静态资源,要多尝试几次才会成功。
---------------------