<mongodb binary =“”data =“”>作为浏览器输出</mongo>

时间:2012-08-24 23:27:38

标签: php mongodb symfony

我在Mongo DB GridFS中存储了一些图像。我现在正试图显示图像,但遇到了严峻的挑战。我看到的只有<Mongo Binary Data>作为输出。我玩过设置标题,但似乎没有什么工作正常。我所看到的只是<Mongo Binary Data>。我尝试发送图像标题(jpeg / png等),但图像是空的。为什么?

以下是显示图片的代码:

public function someAction($imageID)
    {
   $dm = $this->get('doctrine.odm.mongodb.document_manager');

         $image = $dm->createQueryBuilder('Mybundle:Asset')
                     ->field('id')->equals($imageID)
                     ->getQuery()
                     ->getSingleResult();

  return new Response($image->getFile()->getBytes(), 200, array('Content-Type' => 'image/jpeg'));

}

当我尝试将内容类型更改为文字时,我再次获得<Mongo Binary Data>

这是我的路由文件:

my_route:
    pattern:  /showimage/{imageID}
    defaults: { _controller: MyBundle:someController:someAction}
    requirements:
        _method:  GET

1 个答案:

答案 0 :(得分:0)

"<Mongo Binary Data>"是从MongoBinData::__toString()返回的字符串。这种行为可以追溯到很多年前,但我认为它的实现是为了避免无意中生成大输出或回显非可打印字符,如果MongoBinData被转换为字符串。

在您的情况下,我认为$image->getFile()对应于Doctrine\MongoDB\GridFSFile对象。我会在那里开始调试,以查看getBytes()是否返回对象的内部$bytes属性,某些文件内容或链接到MongoGridFSFile::getBytes()

此外,共享Asset类的模型/映射信息可能有所帮助,以及同一查询返回的非水合数据。将->hydrate(false)添加到查询构建器链将完成后者。