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
在這裏插入圖片描述

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