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
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章