【发布时间】:2016-09-13 16:33:38
【问题描述】:
这是我将存储在 GridFS 中的图像显示到 HTML 页面的代码。
$conn = new MongoClient('SHLY_DBSERVER');
$db = $conn->newdb;
$gridFS = $db->getGridFS('productImages');
$image = $gridFS->find();
$im_array=iterator_to_array($image);
return $im_array;
通过将 $im_array 传递给视图..
foreach ($im_array as $key => $value)
{
$imageFile = $value->getBytes();
$img=base64_encode($imageFile); ?>
<img style="width:300px;margin-left: 5em" class="img-responsive" src="data:image/jpg;charset=utf8;base64,<?php echo $img ?>"/><br>
}
显示正常的网页图像是一种好习惯吗? 我应该去文件系统存储吗?
【问题讨论】:
-
将您的图像标签指向一个 php 脚本(使用 src)并通过 $_GET 传递您想要的文件。该 php 脚本从网格 FS 读取图像数据,输出正确的标题并发送图像的原始二进制数据。结果是更多的 Web 请求,但 base64 编码数据的大小没有增加。您还可以让 php 脚本发送适当的标头进行缓存。
-
你能给我看一些代码来理解吗?
-
stackoverflow.com/questions/7793009/…,展示了如何使用 mysql 进行操作,只需将从 mysql db 获取替换为从 gridfs 获取。本质上是一样的。
-
@JonathanKuhn 您是否建议通过替换文件系统来使用 GridFS?我需要最大的性能安全性和灵活性。
-
我没有使用过gridFS,所以我无法证明它的能力。但是,我可以说我通常不喜欢在数据库中存储文档/文件。如果您需要索引文档的内容或元数据,这很有用,但如果您不需要它,它通常是值得的。使用文件系统可以提供同样多的安全性和灵活性,因为它们通常内置在您的应用程序中,而不是存储中。您可能会从文件系统中看到更好的性能,但我们说的是微秒,所以不用担心。我个人的偏好是文件系统。
标签: php mongodb base64 mongodb-query gridfs