【问题标题】:Is there any method to display images from GridFS rather than base64 encoding in html image tag是否有任何方法可以显示来自 GridFS 的图像,而不是在 html 图像标签中显示 base64 编码
【发布时间】: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


【解决方案1】:

对于图像、js、css 和附件文件,您应该将文件存储在文件系统中,因为您的 Web 服务器管理客户端和服务器端缓存。

【讨论】:

    猜你喜欢
    • 2014-04-08
    • 2017-06-23
    • 2016-04-27
    • 2017-04-24
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2011-02-21
    • 2015-11-22
    相关资源
    最近更新 更多