springboot打成jar包后配置外部资源映射成静态资源

原文:https://blog.csdn.net/duangecho/article/details/80258300

 

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值