最近我们在 mongodb 中集成了 Gridfs 用于存储图像。根据我的要求,以前我们使用 NFS 来获取或存储目录中的图像。图像的速度越来越慢。所以我们集成了 GridFS。
GridFS,但现在我要澄清的是,我们如何在单个请求中获得不止一次的图像并将其显示在浏览器中?因为我们在 mongodb gridfs 分片中填充了近 1L 张照片。但我无法在单个请求中获取多个图像。
下面给出的示例代码。- 以下代码将只返回一张照片。我无法按单个请求获取所有图像。如果有人遇到此类问题,请与我们分享。
方法一:只返回一张图片。
$mongo = new Mongo("192.168.0.8:27017");
$db = $mongo->myfiles;
$gridFS = $db->getGridFS();
$cursor = $gridFS->find()->limit(10); - it will return one than one images
/*$cursor = $gridFS->find(array("metadata.memberid"=>"CMD34123")); - it will return one than one images, because the member having more than one images.*/
foreach ($cursor as $obj)
{
header("Content-Type: image/jpg");
$stream = $obj->getResource();
while (!feof($stream)) {
echo fread($stream, 51200);
}
}
方法 2:它返回所有图像,但与 NFS 一样,每个图像都会获取每个 HTTP 请求。没有储蓄。
$mongo = new Mongo("192.168.0.8:27017");
$db = $mongo->myfiles;
$gridFS = $db->getGridFS();
$cursor = $gridFS->find()->limit(10);
foreach ($cursor as $obj)
echo "<img src='getphoto.php?filename=".$obj->getFilename()."'>";
获取照片.php:
$mongo = new Mongo("192.168.0.8:27017");
$db = $mongo->myfiles;
$gridFS = $db->getGridFS();
/*$image = $gridFS->findOne($_REQUEST['filename']);*/
header("Content-Type: image/jpg");
echo $stream = $image->getResource();
while (!feof($stream))
echo fread($stream, 51200);