【記錄】spring boot 圖片上傳與顯示


問題:spring boot 使用的是內嵌的tomcat, 文件上傳指定目錄時不知道文件上傳到哪個地方,不知道訪問路徑。

//部署到服務器的tomcat上時通常使用這種方式
request.getServletContext().getRealPath("picture/");
//然而在spring boot中內嵌的tomacat,所以是臨時目錄,如:C:\Users\Administrator\AppData\Local\Temp\tomcat-docbase.7776702262463059617.8080\picture\

spring boot 把靜態的文件在啟動的時候都會加載到classpath的目錄下的,package時把static目錄下的資源一起打包成jar包,所以上傳的文件不知相對於應用目錄在哪,也不知怎么寫訪問路徑合適。

如果上傳到項目的static目錄下是沒有效果的,需要重新build才能訪問到。

解決方法:

spring boot 的靜態資源默認配置為:

//映射到static(或/public、/resources、/META-INF/resources)目錄
spring: mvc:
static-path-pattern: /** resources: static-locations: classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/, classpath:/public/

通過代碼修改靜態資源配置(這里不能通過配置文件修改,因為會覆蓋默認配置):

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
     //這是系統默認配置 registry.addResourceHandler(
"/**") .addResourceLocations("classpath:/META-INF/resources/") .addResourceLocations("classpath:/resources/") .addResourceLocations("classpath:/static/") .addResourceLocations("classpath:/public/");
//這是添加的配置,表示將/picture/..映射到E:/picture/目錄
     registry.addResourceHandler(
"/picture/**").addResourceLocations("file:E:/picture/"); super.addResourceHandlers(registry); } }

這樣在上傳時將路徑設置為E:/picture/,在訪問上傳的圖片時如/picture/xxx.jpg就能訪問到圖片了。

 

參考文章:https://blog.csdn.net/u011144425/article/details/79225864


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM