如何在 Spring Rest Call 中使用 GridFS 从 Mongodb 发送和检索图像?

Posted

技术标签:

【中文标题】如何在 Spring Rest Call 中使用 GridFS 从 Mongodb 发送和检索图像?【英文标题】:How to send an retrieved image from Mongo using GridFS in Spring Rest Call? 【发布时间】:2015-11-30 09:56:03 【问题描述】:

我已经使用 Spring Data 和 GridFs 模板从 Mongo DB 检索到图像

所以我不知道如何将检索到的输入流返回给用户。

假设他们要求http://host.com/apple 作为春季休息电话。 现在我的应用程序使用名称 apple 处理请求,它从 mongodb 数据库中检索苹果图像。 现在无需保存任何地方,我想将响应显示为将在浏览器中显示 http://host.com/apple 图像的用户。 我究竟需要如何实现这一点?

您能否分享任何代码库以在 Rest Call 中处理图像请求?

Controller Code

 @RestController
    public class GreetingController 

    @RequestMapping("/image")
    public GridFSDBFile imageReponse() 
        App.getImage();
        return App.getImageResponse();
    

这个函数会从mongodb中获取图片

public static GridFSDBFile getImageResponse() 
        try 

            ApplicationContext context = new FileSystemXmlApplicationContext(
                    "file:C:\\workspace\\gs-rest-service-complete\\spring-config.xml");
            FileStorageDao fileStorageDao = (FileStorageDao) context
                    .getBean("fileStorageDao");

            GridFSDBFile retrive = fileStorageDao.retrive("audi.jpg");
            return retrive;
         catch (Exception e) 
            System.out.println("IOException:-" + e.getMessage());
         finally 
            System.out.println("Clean up herer:-");
        
        return null;

    

错误

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Fri Sep 04 17:21:05 IST 2015
There was an unexpected error (type=Internal Server Error, status=500).
Could not write content: No serializer found for class com.mongodb.gridfs.GridFSDBFile$MyInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: com.mongodb.gridfs.GridFSDBFile["inputStream"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class com.mongodb.gridfs.GridFSDBFile$MyInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: com.mongodb.gridfs.GridFSDBFile["inputStream"])

【问题讨论】:

【参考方案1】:

如果您使用的是最新版本的 spring,即 Spring 4.1

,我已经使用了 spring boot 和 rest
@RequestMapping(value = "/image", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<InputStreamResource> getImage() 
        GridFSDBFile gridFsFile = App.getImageResponse();

        return ResponseEntity.ok()
                .contentLength(gridFsFile.getLength())
                .contentType(MediaType.parseMediaType(gridFsFile.getContentType()))
                .body(new InputStreamResource(gridFsFile.getInputStream()));
    

我关注了这篇文章,看看。 Spring MVC: How to return image in @ResponseBody?

【讨论】:

当尝试从浏览器访问 zip 文件时,它将被下载为“f.txt”,而不是实际的 zip 文件名和“.zip”扩展名。知道如何解决这个问题吗? github.com/spring-projects/spring-boot/issues/4220

以上是关于如何在 Spring Rest Call 中使用 GridFS 从 Mongodb 发送和检索图像?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何动态更改 java rest api 响应中的时区?

如何使用 Spring Security 在 Spring App 中测试 REST

如何使用 Spring 在单元测试中模拟远程 REST API?

如何在 Spring-Boot-REST 调用中获取用户信息?

如何在 Spring Boot 中使用带有 Bearer Token 和 form-data 的 Rest Template 调用 REST Api

如何在 Grails 中使用 spring security rest 插件进行身份验证