溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404

發(fā)布時間:2020-08-28 11:19:22 來源:腳本之家 閱讀:226 作者:編程小白 欄目:編程語言

SpringBoot項目上傳圖片一般是上傳至遠程服務(wù)器存儲,開發(fā)過程中可能會上傳至當前項目的某個靜態(tài)目錄中,此時就會遇到這個問題,文件在上傳之后直接訪問并不能被訪問到,必須重新加載項目。

首先分析一下原因:

我們知道,如果使用類似 /upload/image/1.jpg 這種格式進行圖片的訪問的時候,SpringBoot讀取的并不是本項目中直接的靜態(tài)目錄,而是在進行編譯的時候生成target目錄下的文件,如下圖所示:

如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404

那么問題就來了,我們在運行的過程中上傳一個圖片的話,并不能重新加載當前這個項目,也就是target目錄下的文件一直是之前的文件,盡管有人說我進行了SpringBoot熱部署(dev-tools),能夠自動重新加載項目,但是問題是熱部署也需要一定的時間去分析和重新加載項目,所以上傳文件后直接進行訪問肯定就不能實現(xiàn)了。

簡單來說:文件只是單純的上傳到項目的文件夾中,并沒有在target目錄下生成對應(yīng)的文件,導(dǎo)致訪問不到。

在網(wǎng)上看了一個博客,說可以在將文件復(fù)制到本地的時候也將文件復(fù)制到項目的target目錄下,這樣就可以訪問了,聽著也非常的有道理,但是實踐出真知,經(jīng)過我的測試,并不能實現(xiàn),不知道是因為我的問題還是什么,所以并不推薦大家使用這個方法,當然感興趣的也可以測試一下,畢竟這個聽著是真的很有道理。

解決辦法:配置映射路徑攔截器,將虛擬路徑映射為真是圖片地址,達到回顯的目的(已測試,有效)

簡單來說就是將UEditor要訪問的路徑映射成為本地的路徑,廢話不多說直接上代碼:
注:SpringBoot1版本是extends WebMvcConfigurerAdapter類,SpringBoot2版本是implements WebMvcConfigurer,這個地方有點不一樣

@Override
 public void addResourceHandlers(ResourceHandlerRegistry registry){
   registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
   registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
   registry.addResourceHandler("/static/ueditor/**").addResourceLocations("classpath:/static/ueditor/");
   registry.addResourceHandler("/public/**").addResourceLocations("classpath:/public/");
   registry.addResourceHandler("/static/upload/image/**").addResourceLocations("file:" + UploadUtils.getImgDirFile().getAbsolutePath() + "/"); //添加這一行
 }

UploadUtils.java

public class UploadUtils {

 // 項目根路徑下的目錄 -- SpringBoot static 目錄相當于是根路徑下(SpringBoot 默認)
 public final static String IMG_PATH_PREFIX = "static/upload/image";

 public static File getImgDirFile(){

  // 構(gòu)建上傳文件的存放 "文件夾" 路徑
  String fileDirPath = new String("src/main/resources/" + IMG_PATH_PREFIX);

  File fileDir = new File(fileDirPath);
  if(!fileDir.exists()){
   // 遞歸生成文件夾
   fileDir.mkdirs();
  }
  return fileDir;
 }

}

重點在于getAbsolutePath()方法,這個函數(shù)的作用是獲取當前項目在當前運行環(huán)境下的絕對路徑,如我現(xiàn)在在開發(fā)過程中獲得的結(jié)果就是D:\WorkSpace\IDEA-WorkSpace\......

設(shè)置完畢之后就可以正常顯示了。

注:如果你所使用的是SpringBoot多模塊項目,那么通過這個方法獲取到的往往是父項目所在的地址,因此也會出現(xiàn)問題,解決這個問題的辦法是配置當前項目啟動類的工作環(huán)境是在具體的某個項目

如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404   如何解決SpringBoot集成百度UEditor圖片上傳后直接訪問404

設(shè)置完畢后即可解決這個問題

附:之前在說這個問題的時候,也有人給我提了一個建議,就是不將圖片放置在項目中,而是放置在某個固定的盤符中,這樣返回請求路徑的時候直接請求本地地址,等將來發(fā)布到服務(wù)器的時候使用Nginx。

不過問題是我對Nginx并不是很了解,所以等我學(xué)會了Nginx之后再來完善吧,你們可以先替我試試好不好用

以上就是本次介紹的關(guān)于SpringBoot圖片上傳404的全部知識點內(nèi)容,感謝大家的學(xué)習(xí)和對億速云的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI