2015-08-08 85 views
6

我使用春天mvc與thymeleaf上傳圖像到服務器,並提交表單在一個單獨的頁面「結果」後顯示它。上傳的圖像不會顯示,直到我刷新頁面春季Mvc

問題是圖像不顯示,直到我在Spring Tool Suite中刷新資源文件夾「resources/static/images」,然後刷新頁面。 我修改Eclipse工作區選項自動刷新和IDE部分解決,但仍然需要刷新結果頁面以獲取圖像顯示

這是控制器代碼

@RequestMapping(value = "/save", method = RequestMethod.POST) 
public String contentSubmit(@Valid @ModelAttribute ContentEntity cm, BindingResult result, 
     @RequestParam("file") MultipartFile file, Model model) { 
    if (!file.isEmpty()) { 
     try { 
      cm.setImgUrl(file.getOriginalFilename()); 
      byte[] bytes = file.getBytes(); 
      BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File("src/main/resources/static/images/"+cm.getImgUrl()))); 
      stream.write(bytes); 
      stream.close(); 
     } catch (Exception e) { 
      //return error page 
     } 
    } 

    if (result.hasErrors()) { 
     return "cms"; 
    } 

    contentDao.addContent(cm); 
    return "view"; 
} 

,這是視圖代碼

<img th:src="@{'images/'+${contentEntity.imgUrl}}" class="image-responsive thumbnail" /> 
+3

服務器不提供'src/main/resources /'中的圖像。它通過從該目錄(和其他)構建的Web應用程序提供服務。考慮將Web應用程序作爲一個大型的war文件,在運行時無法修改(因爲這應該是)。考慮將上傳的圖像作爲數據存儲在生產Web服務器上或應用程序數據庫中的應用程序**以外的地方,因爲這就是它們的原因。您需要一個servlet或控制器來獲取映像標識,讀取相應的文件或數據庫blob,並將數據以適當的內容類型發送回瀏覽器。 –

回答

3

您在「src/resources/...」目錄中實用地創建資源(圖像文件)。然而,看起來你的服務器是來自不同目錄的serverig圖像(比如target/**或bin/**)。因此,當您刷新資源目錄時,STS會檢測到最近創建的新文件,然後將該文件複製到目標目錄下。

在eclipse中有一個「原生掛鉤或輪詢」選項,它不斷監視資源的變化(即使外部是由STS/eclipse製作的)。只要它檢測到更改,資源就會自動刷新。

您可能想通過設置此選項:首選項>常規>工作空間>「刷新使用本地鉤子或輪詢」

enter image description here

希望這有助於。

相關問題