很多的项目都要上传图片那些,然后通过打包jar包或者war包发布到服务器上,我们不可能把上传图片的文件夹放在jar包或者war包里面,那样会越来越大。所以有了下面的配置,其他框架都好说可以把文件放在tomact下,但是springboot项目是内置tomact所以会有一点的小麻烦。

如果你的项目只要在本地上运行可以参考:

如果你的项目要打成jar包放到服务器上请参考如下

进入主题,配置如下:

在springboot项目中的application.properties配置文件下,我们通常会规定一个tomact的虚拟路径,如下:

server.tomcat.basedir=logistics/tomcat

此虚拟路径会在你把springboot项目打成jar包运行后在你的jar包同级目录下产生一个logistics目录。所以我把我要上传的文件的全部放在这个文件夹目录下

springboot项目打包的jar包                                                        

springmvc配置静态资源影响Controller spring gateway 静态资源_jar

                                           

在logistics文件放入你要上传图片的的文件夹

springmvc配置静态资源影响Controller spring gateway 静态资源_jar包_02

这是我要上传文件的一些文件夹

然后在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包的绝对路径,请注意是绝对路径,然后通过拼接形式访问到你存放文件的目录。可能不同的项目获取文件路径有差异但是都是这个原理:取得你存放文件的绝对路径然后映射成静态资源,要多尝试几次才会成功。

然后把你的springboot项目打成jar,流程如下:

1.打开maven project

springmvc配置静态资源影响Controller spring gateway 静态资源_spring_03

2.点击那个m的图标,输入如下代码

springmvc配置静态资源影响Controller spring gateway 静态资源_jar包_04


3.然后会在你项目的target中生成jar包:

springmvc配置静态资源影响Controller spring gateway 静态资源_jar_05

然后你可以把你的项目放到任何文件夹下面然后打开cmd进入到你对应的文件夹下输入:java -jar 你的jar的名称

然后会在你的jar包的同级目录下生成你配置文件中配置的一个虚拟目录,把你的文件放在你下面,上面有说过。