Spring Boot配置外部静态资源访问路径


Spring Boot配置外部静态资源访问路径

今天看论坛看到一个问题,是为了解决springboot项目打成jar包之后静态资源动态上传和项目访问的问题,如果不做处理的话静态资源会跟着代码一起被打到jar包里边,如果静态资源修改的话还得重新打包,会很麻烦,所以就通过一些方式来让程序能够访问jar包外部的文件。

百度找了很多,发现可以在配置文件中配置需要访问文件夹的绝对路径,虽然这种方式可以,但是在不同机器上部署的话这个绝对路径就很扯淡了,我还想到了用相对路径,但是尝试之后发现根本不行,最终只能屈服于写代码做映射关系,在百度上找了不少,但是看了之后感觉并不是特别完美,甚至有些比较老的,代码里继承的类都作废了,所以就只能自己动手丰衣足食啊哈哈。

话不多说直接开始

步骤

1.配置文件

在application.properties配置文件中写下边代码即可

server.tomcat.basedir=logistics/tomcat 

这一步是规定一个tomcat的虚拟路径,在项目运行时会在运行目录同级生成一个logistics文件夹,我们直接把需要动态修改的静态资源放到这里就可以了

2.代码映射

通常情况我们搭建项目时都是要有一个目录层级的,这一部分配置的话我习惯创建一个包configration,这个包里全部放置bean配置相关的代码,然后创建一个文件FileHandleConfig,具体代码如下:

import org.springframework.context.annotation.Configuration; import org.springframework.util.ResourceUtils; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import java.io.File; import java.io.FileNotFoundException; @Configuration public class FileHandleConfig extends WebMvcConfigurationSupport { @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); } } 

具体这些代码是干啥的我就不细说了

需要注意的地方是这段代码:

String gitPath = path.getParentFile().getParentFile().getParent() + File.separator + "logistics" + File.separator + "uploads" + File.separator; 

如果你是用开发工具启动的,那么就把getParentFile().getParentFile()去掉,如果是打成jar包运行的话就直接按照上边代码写就行了,这段代码中拼接的uploads可以根据自己情况,我这里用了uploads是为了给文件上传准备的

这段代码是映射外部文件的代码:

registry.addResourceHandler("/uploads/**").addResourceLocations(gitPath); 

这段代码是映射你项目的静态资源的:

registry.addResourceHandler("/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX + "/static/"); 

需要注意两个映射的访问路径不能相同, 因为这个映射之后在浏览器中访问是无感的,根本看不出来你这资源到底是内部资源还是外部资源,如果路径相同了就会出现矛盾

如图所示:
启动jar包之后生成的logistics文件夹下有个tomcat文件夹,再往下还有好多,咱们在这里直接创建一个uploads文件夹,然后把需要用的静态文件放进去就可以直接浏览器访问了,访问地址: http://localhost:8080/uploads/c.png
在这里插入图片描述

原文链接:https://blog.csdn.net/qq_41853009/article/details/106219282?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165277103516781435431788%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165277103516781435431788&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-10-106219282-null-null.nonecase&utm_term=%E8%B5%84%E6%BA%90

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
文明发言,共建和谐米科社区
提交
头像

昵称

取消
昵称表情图片