1

我在 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
4

1 回答 1

0

"<Mongo Binary Data>"是从MongoBinData::__toString()返回的字符串。这种行为可以追溯到几年前,但我认为它是为了避免在将 MongoBinData 转换为字符串时无意中生成大量输出或回显不可打印的字符。

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

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

于 2014-01-15T01:08:51.037 回答