2016-03-29 117 views
3

現在我有一個簡單的Spring Boot應用程序,可以爲我提供的靜態圖像提供resources/static/img。這只是正常顯示的實際內容,但有兩件事情,我想修復:通過Spring Boot提供動態變化的靜態內容

  1. 我不希望任何這些圖像與生成的.jar文件捆綁在一起的,我知道將這些圖像放在resources文件夾中將會這樣做。

  2. 使用我當前的設置,爲了在webapp上看到新的圖像,我必須將它添加到文件夾並重新啓動它。相反,Spring會提供特定文件夾中存在的任何靜態內容,因此我可以在應用程序正在運行時添加圖像,並讓它們自動在localhost:8080/img/{image name}處提供服務。

我試圖通過建立一個資源處理程序來解決這個問題,但我不知道這是不是簡單地從resources/static爲他們提供服務有什麼不同。不幸的是,我仍然努力正確地配置它,因爲我根本看不到任何圖像。下面是我的嘗試:

@Configuration 
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter { 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/img/**").addResourceLocations("file:" + Application.IMAGE_DIR); 
     super.addResourceHandlers(registry); 
    } 
} 

,這裏是我的應用程序配置:

@SpringBootApplication 
public class Application extends SpringBootServletInitializer { 

    static String IMAGE_DIR; 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(Application.class); 
    } 

    public static void main(String[] args) throws IOException { 
     SpringApplication.run(Application.class, args); 
     IMAGE_DIR = new File(".").getCanonicalPath() + "/img/"; 
    } 

} 

同樣,我的目標是建立一個文件夾在我的項目的根目錄中稱爲img將存儲的圖像,我希望webapp能夠在localhost:8080/img/{image name}上投放。如果可能的話,我希望能夠在應用程序運行時向該文件夾添加內容,並讓Spring自動爲它們提供服務而無需重新啓動它。

有沒有人有任何想法?提前致謝。

回答

2

您的方法存在的問題是,在彈簧引導應用程序運行並且常量IMAGE_DIR未初始化並且爲null後,您設置IMAGE_DIR。更改它如下:

public static void main(String[] args) throws IOException { 
     IMAGE_DIR = "/opt/img/"; 
     SpringApplication.run(Application.class, args); 
    } 

並刪除所有File(".").getCanonicalPath()相關的東西,它會工作。當您在所選目錄中提供新圖像時,您的方法將滿足您的需求。

+0

感謝您的回答。事實證明你是對的 - 我所要做的就是將「IMAGE_DIR」行向上移動一行,並且完美地工作。謝謝! –

0

與你的觀點來解決問題2

  • 使用我的當前設置,才能看到web應用程序的新形象,我必須將它添加到該文件夾並重新啓動它。我反而喜歡 Spring提供特定文件夾中存在的任何靜態內容, ,因此我可以在應用程序正在運行時添加圖像,並在localhost:8080/img/{image name}處自動提供 。
  • 您可以創建在所有這些圖片:

    /resources/public 
        -img 
        -js,... 
    

    以及訪問本地主機剛:8080/IMG/yourImage。png

    「public」文件夾下的所有東西都可以訪問

    相關問題