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());
    }

}
Другие вопросы по тегам