2012-05-17 47 views
0

我正在使用GridFS,并且我目前已经使用findOne来显示单个图像,但我希望它遍历网格中的所有结果并将它们全部回显到屏幕,这里是我使用的代码:迭代遍历结果MongoDB和GridFS(PHP)

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

感谢

回答

0

使用“发现”与“findOne”,这将返回一个结果集,你可以通过在foreach,像循环:

$ files = $ grid-> find({});

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

+0

我试过这个$ files = $ grid-> find(); foreach($ files as $ file){echo $ file-> getBytes(); }虽然它不起作用 –

+0

如果你想要所有的文件,试试find({})(注意大括号为空参数)。而不是显示$ file-> getBytes();在你的循环中,尝试“print_r($ file);”只是为了调试,看看你是否有任何东西。 – jbnunn

0

一般情况下,如果你在网页上显示图像,你想有一堆像<img src="someUrl" />标签,然后让每个someUrl手柄得到一个单一的形象。

0

您将标头设置为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属性使用文件的元数据来检测。

希望这会有所帮助。