1

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

我需要做的是遍历存储在gridFS中的图像以将它们全部显示,我可以获得要迭代的文件名,并且文件名在find的参数内,但它不起作用,我只是得到一个损坏的图像,这里是代码:

显示.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());
}
?>

非常感谢

4

1 回答 1

2

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

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

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

于 2012-05-17T20:53:18.857 回答