遍历结果 MongoDB 和 GridFS (PHP)

Posted

技术标签:

【中文标题】遍历结果 MongoDB 和 GridFS (PHP)【英文标题】:Iterating through results MongoDB & GridFS (PHP) 【发布时间】:2012-05-17 14:27:40 【问题描述】:

我正在使用 GridFS,我目前使用 findOne 让它显示单个图像,尽管我希望它遍历网格中的所有结果并将它们全部回显到屏幕,这是我正在使用的代码:

<?php
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->findOne(array('_id' => new MongoId('4fb437dbee3c471b1f000001')));

  // 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】:

一般来说,如果您在网页上显示图像,您希望有一堆标签,例如&lt;img src="someUrl" /&gt;,然后让每个 someUrl 处理获取单个图像。

【讨论】:

【参考方案2】:

使用“find”与“findOne”,这将返回一个您可以使用 foreach 循环遍历的结果集,例如:

$files = $grid->find();

foreach($files as $file) echo $file->someData;

【讨论】:

我试过这个 $files = $grid->find(); foreach($files as $file) echo $file->getBytes(); 虽然它不起作用 如果您想要所有文件,请尝试 find()(注意大括号为空参数)。并且,而不是显示 $file->getBytes();在你的循环中,尝试“print_r($file);”只是为了调试看看你是否得到任何东西。【参考方案3】:

您将标题设置为 image/png,因此浏览器只需要一张图片。

您可以将其更改为 text/html 文档并使用数据 URI 方案(请参阅 http://en.wikipedia.org/wiki/Data_URI_scheme )嵌入图像,然后以一系列图像标签输出图像。

<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>My images</title>
    <head>
    <body>
    <?php
    /* ... db connection/init code ... */

    $files = $grid->find();

    foreach($files as $file)  
       $encodedData = base64_encode($file->getBytes());
       echo "<img src=\"data:image/png;base64,$encodedData\">";
       echo "<br>";
    
    ?>
    </body>
</html>

请注意,您可能想要检测图像的 mime 类型并相应地更改并使用文件的元数据设置 alt、width 和 height 属性。

希望这会有所帮助。

【讨论】:

以上是关于遍历结果 MongoDB 和 GridFS (PHP)的主要内容,如果未能解决你的问题,请参考以下文章

mongodb Gridfs操作

mongodb学习之:GridFS

MongoDB GridFS

MongoDB GridFS

使用 GridFs 从 mongoDB 读取和显示图像

转发mongodb Gridfs操作