在Springboot中默認的靜態資源路徑有:classpath:/METAINF/resources/
,classpath:/resources/
,classpath:/static/
,classpath:/public/
,從這里可以看出這里的靜態資源路徑都是在classpath
中(也就是在項目路徑下指定的這幾個文件夾)
試想這樣一種情況:一個網站有文件上傳文件的功能,如果被上傳的文件放在上述的那些文件夾中會有怎樣的后果?
-
網站數據與程序代碼不能有效分離;
-
當項目被打包成一個
.jar
文件部署時,再將上傳的文件放到這個.jar
文件中是有多么低的效率; -
網站數據的備份將會很痛苦。
此時可能最佳的解決辦法是將靜態資源路徑設置到磁盤的基本個目錄。在Springboot中可以直接在配置文件中覆蓋默認的靜態資源路徑的配置信息:application.properties
配置文件如下:
spring.mvc.static-path-pattern=/** spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:這里寫自己的上傳文件路徑(注意要以/結尾)
spring.mvc.static-path-pattern=/**
表示所有的訪問都經過靜態資源路徑;
spring.resources.static-locations
在這里配置靜態資源路徑,前面說了這里的配置是覆蓋默認配置,所以需要將默認的也加上否則static
、public
等這些路徑將不能被當作靜態資源路徑,在這個最末尾的file:${web.upload-path}
之所有要加file:
是因為指定的是一個具體的硬盤路徑,其他的使用classpath
指的是系統環境變量。
由於前面已經在靜態資源路徑中上傳了一個名為1.jpg
的圖片,也使用server.port=1122
設置了端口號為1122
,所以可以通過瀏覽器打開:http://localhost:1122/1.jpg
訪問到剛剛上傳的圖片。但是要注意,如果你在springboot的配置文件中加了屬性server.context-path,即項目名,那么訪問的時候一定要加上這個配置的屬性值,不然404.
參考博客:https://blog.csdn.net/qq_36750461/article/details/85050946