MongoDB gridFS显示所有图像

时间:2012-05-17 18:41:59

标签: php mongodb gridfs

我目前正在使用两个文件,一个获取内容,第二个显示(或尝试)

我需要做的是遍历存储在gridFS中的图像以显示它们全部,我可以获取文件名进行迭代,文件名在查找的paramiter中,但它不起作用,我只是得到破损的图像,这是代码:

Display.php的

 <?php
   // open connection to MongoDB server
  $conn = new Mongo;

  // access database
  $db = $conn->database;

  // get GridFS files collection
  $grid = $db->getGridFS();

  $cursor = $grid->find(); 

    foreach ($cursor as $obj) {                   // iterate through the results
        $filename = $obj->getFilename().'<br/>';
    echo "<img src='newupload.php?filename=".$filename."'>";
    echo $filename;
    }


?>

这里是进入gridFS的那个

<?php
  $filename = $_GET['filename'];
try {
  // open connection to MongoDB server
  $conn = new Mongo;

  // access database
  $db = $conn->database;

  // get GridFS files collection
  $grid = $db->getGridFS();

  // retrieve file from collection
  header('Content-type: image/png');
  $file = $grid->find(array('filename' => $filename ));

  // send headers and file data

  echo $file->getBytes();
  exit;  

  // disconnect from server
  $conn->close();
} catch (MongoConnectionException $e) {
  die('Error connecting to MongoDB server');
} catch (MongoException $e) {
  die('Error: ' . $e->getMessage());
}
?>

非常感谢

1 个答案:

答案 0 :(得分:2)

问题是find()对象的MongoGridFS方法返回游标,而不是MongoGridFSFile对象;游标没有getBytes()方法。您收到的实际输出可能是catch子句中的die(...)消息之一,浏览器无法将其显示为图像。

而不是find(array('filename' => $filename)),您应该使用findOne(array('filename' => $filename))

请注意,如果有多个文件具有相同的文件名,您可能需要降低到较低级别以确保找到所需的文件(您想要哪一个取决于您的需要;也许是第一个,也许它是最新的,或者也许是基于其他一些标准)。在这种情况下,您可以手动查询GridFS集合(它名为“fs.files”),找到您要返回的文件,并将其_id传递给get() MongoGridFS方法}}