2017-04-21 54 views
0

我正在構建一個使用spring啓動和mongodb的blogging的web應用程序。我嘗試使用gridFS存儲和使用輸入流來存儲數據。但我不能回的圖像作爲模型attribute.It是我的控制器類如何在春季4中存儲和返回圖像作爲模型屬性

@RestController 
public class HomeController { 

@Autowired 
GridFsTemplate gridFsTemplate; 

@RequestMapping(value = "/home", method = RequestMethod.GET) 
@ResponseBody 
public ResponseEntity<InputStreamResource> getImage() { 
    GridFSDBFile gridFsFile = gridFsTemplate.findOne(new Query().addCriteria(Criteria.where("metadata.user").is("5")));; 
    InputStream inputStream = gridFsFile.getInputStream(); 
    System.out.println("done"); 
    return ResponseEntity.ok() 
      .contentLength(gridFsFile.getLength()) 
      .contentType(MediaType.parseMediaType(gridFsFile.getContentType())) 
      .body(new InputStreamResource(gridFsFile.getInputStream())); 
} 
} 

,這是我的看法

<html xmlns:th="http://www.thymeleaf.org"> 
<head> 
</head> 
<body> 
<img th:src="@{/home}" /> 
</body> 
</html> 
+0

歡迎SO。你應該發佈一些你的代碼嘗試。否則,你會得到一堆倒票和評論,說這不是一個代碼寫作服務。 – BWMustang13

+0

我添加了我的代碼 –

+0

只是爲了清楚起見 - 你是**不是**在代碼中的任何位置返回一個圖像作爲模型屬性 - 你正在做的是將圖像作爲響應主體返回到'/ home'端點。當你在瀏覽器中打開'/ home'端點時會發生什麼?圖像顯示出來了嗎? – vtosh

回答

0

你可以得到圖像的字節[],然後可以這樣寫字節數組以響應對象。現在將這個方法映射到一些url。代碼會是這樣的 -

@RequestMapping(value="/imgPath") 
public void imgResponse(HttpServletResponse response){ 
ServletOutputStream stream = response.getOutputStream(); 
    /* get byte array and assign it to the variable dataa */ 
    stream.write(data); 
    stream.flush(); 
} 

現在你可以在JSP中提供這個形象像 -

<img src="./imgPath""/>