Spring: запись изображения из GridFS в представление jsp
Я использую GridFS для хранения изображений. Теперь я хочу записать сохраненное изображение непосредственно на страницу просмотра весны. Я много пробовал, но не получилось. Я могу написать изображение в моей локальной системе с помощью
gfs.writeTo("my location of local directory");
но как я могу написать то же самое изображение в представление JSP весной? Любая помощь приветствуется.
1 ответ
Это работает для меня
Подавать метод:
@Override
public void serveImage(String imageId , HttpServletResponse response ) {
InputStream is = null;
ApplicationContext ctx = new AnnotationConfigApplicationContext(MongoDBConfiguration.class);
GridFsOperations gridOperations = (GridFsOperations) ctx.getBean("yourBeanName");
List<GridFSDBFile> result = gridOperations.find(new Query().addCriteria(Criteria.where("_id").is(imageId)));
for (GridFSDBFile file : result) {
try {
response.setHeader("Content-Disposition", "inline; filename=image.jpg");
response.setContentType("image/jpg");
response.setContentLengthLong(file.getLength());
is = file.getInputStream();
IOUtils.copy(is, response.getOutputStream());
response.flushBuffer();
} catch (java.nio.file.NoSuchFileException e) {
response.setStatus(HttpStatus.NOT_FOUND.value());
} catch (Exception e) {
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
}
}
}
HTML-код:
<image>
<source th:src="@{/get/${imageId}}" type="image/jpg">
</image>
Класс контроллера:
@RequestMapping(value = "/get/{imageId}", method = RequestMethod.GET)
public void handleFileDownload(@PathVariable String imageId, HttpServletResponse response) {
try {
vaskService.serveImage(imageId, response);
} catch (Exception e) {
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
}
}