【问题标题】:display image stored in database显示存储在数据库中的图像
【发布时间】:2013-09-06 18:31:27
【问题描述】:

我在我的 sql 数据库中有经过 base64 编码为 blob 的图像。

使用 php 脚本,我可以在浏览器中正确显示图片。

echo '<img src="data:image/jpeg;base64,' . $fetch_row['object']. '" />';

但是,我想创建一个可以直接显示照片或通过访问 php 文件并在列中返回图片的视图。我试过使用类似的东西:在mysql中

concat('<img src="data:image/jpeg;base64,',`object`,'" />')
or concat('<img src=/image.php? blah blah blah)

有什么想法吗?

【问题讨论】:

  • 图像应该存储在目录而不是数据库中以跳过缓慢的过程
  • 我建议重新考虑这个策略。将图像存储在目录中,并将图像文件名存储在数据库中。将图像存储为 BLOB 很慢,并且会使您的数据库变得庞大。

标签: php mysql image tags src


【解决方案1】:
<?php

header('Content-type: image/jpeg');
echo base64_decode($fetch_row['object']);

您的问题也正好代表了为什么将图像存储在数据库中是一个坏主意。如果图像只是服务器驱动器上的一个文件,您可以拥有

<img src="/path/to/file.jpg" />

而且根本不必涉及 DB/PHP 层。就目前而言,您的 data-uri 版本完全阻止浏览器缓存该图像,并且您将强制用户每次都下载该图像,从而消耗他们(和您的)带宽。

【讨论】:

  • 如果您在响应中设置了正确的标头,您可以缓存数据库支持的内容,但使用静态内容和正确的配置,您的网络服务器会自动为您完成。
  • 不是当 db 支持的内容被塞入页面正文时,因此没有通过该数据返回服务器的独立链接。例如填充一个 10meg 的图像,base64 编码的数据 uri 会强制浏览器每次尝试并吸收 10+meg 的页面,如果该页面本身设置为不被缓存。浏览器无法知道应该缓存 10+megs 的图像数据。
  • 你知道一个可靠的php脚本可以保存图像并在mysql中创建引用它的url吗? ---> echo base64_decode($fetch_row['object']);我用你发布的那个替换了我的回声线,它工作得很好。
  • 您将图像保存在服务器上的某个位置,并将文件的路径存储在数据库中。例如只是一个简单的字符串/path/to/file
  • 感谢马克的所有帮助。这些图像会自动上传到数据库。通常一次来自各种用户设备的数百个。我需要一个可以保存文件并自动将 url 插入数据库的脚本。
猜你喜欢
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多