我目前正在使用两个文件,一个获取内容,第二个显示(或尝试)
我需要做的是遍历存储在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());
}
?>
非常感谢
答案 0 :(得分:2)
问题是find()
对象的MongoGridFS
方法返回游标,而不是MongoGridFSFile
对象;游标没有getBytes()
方法。您收到的实际输出可能是catch子句中的die(...)
消息之一,浏览器无法将其显示为图像。
而不是find(array('filename' => $filename))
,您应该使用findOne(array('filename' => $filename))
。
请注意,如果有多个文件具有相同的文件名,您可能需要降低到较低级别以确保找到所需的文件(您想要哪一个取决于您的需要;也许是第一个,也许它是最新的,或者也许是基于其他一些标准)。在这种情况下,您可以手动查询GridFS集合(它名为“fs.files”),找到您要返回的文件,并将其_id
传递给get()
MongoGridFS
方法}}