网站首页 > 技术文章 正文
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
- 上一篇: Java 中读取文件内容的 n 中方式
- 下一篇: 版本不兼容Jar包冲突该如何是好?
猜你喜欢
- 2024-11-25 【力扣】[Java版]刷题笔记-合并两个有序链表
- 2024-11-25 Java中对于+和append拼接字符串效率的误解
- 2024-11-25 java使用ByteBuffer并进行多文件合并和拆分
- 2024-11-25 2020-12-17:java和go,如何高效的拼接字符串?
- 2024-11-25 Java字符串拼接技术演进及阿里巴巴的贡献
- 2024-11-25 如何提升Jmeter操作?那你一定得学会BeanShell
- 2024-11-25 Java 字符串拼接 五种方法的性能比较分析
- 2024-11-25 Java合并两个数组,以及数组排序并去重
- 2024-11-25 Java Stream 流如何进行合并操作
- 2024-11-25 Java请求合并与分而治之