我使用PHP在MongoDB中成功存储了图像文件,当我从Mongo db中检索图像时我遇到了一些问题,任何人都可以给出解决方案 这是我的代码:
<?php
$m = new Mongo();
$db = $m->selectDB("example");
$article = $db->articles;
$files = $article->find();
$gridFS = $db->getGridFS();
?>
<table>
<?php
$i=1;
foreach ($files as $storedfiles) {
?>
<tr>
<td width="30%"><strong><?php echo $i; ?></strong></td>
<td width="70%">
<?php //echo $storedfiles["_id"]; ?>
<?php echo "Id :".$storedfiles["_id"]; ?>
<?php echo "Title :".$storedfiles["title"]; ?>
<?php echo "Keywords :".$storedfiles["keywords"]; ?>
<?php echo "Image :".$storedfiles["image"]; ?>
<?php $image = $gridFS->findOne(array('_id' => new MongoId($storedfiles["image"])));
header('Content-type: image/jpg;');
echo $image->getBytes();
?>
</td>
</tr>
<?php
$i++;
}
?>
</table>
答案 0 :(得分:3)
您的示例没有意义(“文章”不是GridFS集合,因此其文档_ids可能与GridFS文件不匹配),但这是插入/取回图像的示例:
$m = new Mongo();
$db = $m->example;
$gridFS = $db->getGridFS();
$id = 123;
// store
$gridFS->storeFile("someFile.jpg", array("_id" => $id));
// retrieve
echo $gridFS->findOne(array("_id" => $id))->getBytes();
尝试查询$db->fs->files
以查看您应该查询的_ids。
此外,您无法从任意字符串创建MongoId。您可以使用24位十六进制字符串创建一个。如果你想要别的东西(如上所述),只需为_id字段使用不同的类型。