1. 程式人生 > >SpringBoot中靜態資源配置

SpringBoot中靜態資源配置

在Springboot中預設的靜態資源路徑有:classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/,從這裡可以看出這裡的靜態資源路徑都是在classpath中(也就是在專案路徑下指定的這幾個資料夾)

試想這樣一種情況:一個網站有檔案上傳檔案的功能,如果被上傳的檔案放在上述的那些資料夾中會有怎樣的後果?

  • 網站資料與程式程式碼不能有效分離;
  • 當專案被打包成一個.jar檔案部署時,再將上傳的檔案放到這個.jar檔案中是有多麼低的效率;
  • 網站資料的備份將會很痛苦。

此時可能最佳的解決辦法是將靜態資源路徑設定到磁碟的基本個目錄。

Springboot中可以直接在配置檔案中覆蓋預設的靜態資源路徑的配置資訊:

  • application.properties配置檔案如下:

   
  1. server.port= 1122
  2. web.upload-path=D:/temp/study13/
  3. spring.mvc. static-path-pattern=/**
  4. spring.resources. static-locations=classpath:/META-INF/resources/,classpath:/resources/,\
  5. classpath:/ static
    /,classpath:/ public/,file:${web.upload-path}

注意:web.upload-path這個屬於自定義的屬性,指定了一個路徑,注意要以/結尾;

spring.mvc.static-path-pattern=/**表示所有的訪問都經過靜態資源路徑;

spring.resources.static-locations在這裡配置靜態資源路徑,前面說了這裡的配置是覆蓋預設配置,所以需要將預設的也加上否則staticpublic等這些路徑將不能被當作靜態資源路徑,在這個最末尾的file:${web.upload-path}之所有要加file:是因為指定的是一個具體的硬碟路徑,其他的使用classpath指的是系統環境變數

  • 編寫測試類上傳檔案

   
  1. package com.zslin;
  2. import org.junit.Test;
  3. import org.junit.runner.RunWith;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import org.springframework.test.context.junit4.SpringRunner;
  7. import org.springframework.util.FileCopyUtils;
  8. import java.io.File;
  9. /**
  10. * Created by 鍾述林 [email protected] on 2016/10/24 0:44.
  11. */
  12. @SpringBootTest
  13. @RunWith(SpringRunner.class)
  14. public class FileTest {
  15. @Value("${web.upload-path}")
  16. private String path;
  17. /** 檔案上傳測試 */
  18. @Test
  19. public void uploadTest() throws Exception {
  20. File f = new File("D:/pic.jpg");
  21. FileCopyUtils.copy(f, new File(path+"/1.jpg"));
  22. }
  23. }

注意:這裡將D:/pic.jpg上傳到配置的靜態資源路徑下,下面再寫一個測試方法來遍歷此路徑下的所有檔案。


   
  1. @Test
  2. public void listFilesTest() {
  3. File file = new File(path);
  4. for(File f : file.listFiles()) {
  5. System.out.println("fileName : "+f.getName());
  6. }
  7. }

可以到得結果:

fileName : 1.jpg
   

說明檔案已上傳成功,靜態資源路徑也配置成功。

  • 瀏覽器方式驗證

由於前面已經在靜態資源路徑中上傳了一個名為1.jpg的圖片,也使用server.port=1122設定了埠號為1122,所以可以通過瀏覽器開啟:http://localhost:1122/1.jpg訪問到剛剛上傳的圖片。

示例程式碼:https://github.com/zsl131/spring-boot-test/tree/master/study13

本文章來自【知識林】