【发布时间】:2011-10-28 17:10:17
【问题描述】:
我正在创建一个博客,每篇文章都有一张特色图片。我有一个难题,我不确定如何处理我的图像数据...
我应该使用 BLOB 将图像数据插入到我的 MYSQL 数据库中吗?
或者我应该只创建一个上传器,在用户图像文件夹中创建一个目录并以这种方式上传照片...然后在添加博客文章时直接在图像字段中引用它?
有没有标准化的方法?
亲切的问候, 亚当
【问题讨论】:
我正在创建一个博客,每篇文章都有一张特色图片。我有一个难题,我不确定如何处理我的图像数据...
我应该使用 BLOB 将图像数据插入到我的 MYSQL 数据库中吗?
或者我应该只创建一个上传器,在用户图像文件夹中创建一个目录并以这种方式上传照片...然后在添加博客文章时直接在图像字段中引用它?
有没有标准化的方法?
亲切的问候, 亚当
【问题讨论】:
将文件上传到您的服务器并将文件的位置保存在您的数据库中。对你的数据库和你的 HTTP 守护进程的压力较小,在提供图像方面比 MySQL 更好。
【讨论】:
一般的做法是不将文件存储在 DB 中,除非您了解为什么需要将文件存储在那里。因此,由于您不确定,将它们存储在上传文件夹中要简单得多。
但是,如果您决定需要在数据库中存储文件(无论是图像还是其他文件),您必须声明 BLOB 字段,然后使用一些支持 BLOB 的数据库机制保存它。 'PHP's MySQLi extension: Storing and retrieving blobs' 是一个很好的例子来说明它是如何制作的
【讨论】:
您应该将图像存储在文件夹中。点击下面的链接,您可以了解如何裁剪不同尺寸的图像并将图像名称存储到数据库表中:
【讨论】:
将图像数据转换为base64。这可以在 PHP 中完成:
<?
$image=file_get_contents("image.png");
$image=base64_encode($image);
?>
将图像存储在数据库中对于安全图像来说是个好主意。
【讨论】:
始终将图像、音乐文件等存储在磁盘上的系统文件中,然后将它们的 url 存储在数据库中。这样就可以了
1) 更快
2) 更容易配置安全设置
3) 在我能想象到的任何方面都更好
缺点
如果文件系统损坏,您将很难恢复。
您也可以使用第三方图像托管站点,您可以使用 Amazon S3 或 Mosso Cloud Files。
文件系统的问题是难以扩展。
Facebook 使用cassandra 来存储图像。
因为它是博客,所以你可以将图像存储在文件系统中。
【讨论】:
两者都是有效的方法。
它们有不同的优点/缺点。
将其存储在数据库中意味着您需要添加额外的代码以将图像更改为适合 INSERT/UPDATE 语句的表示(base64 是一种方法,需要等效解码,但您可以只使用 mysql_real_escape_string() )。虽然您不能直接查询图像(除了查找完全匹配),但与在数据库中查找路径然后检索文件相比,它可能会减少检索数据所需的查找和 I/O 操作的数量。
如果您在多个节点上运行,与设置数据库和文件系统的复制相比,设置数据库的复制也简单得多。还有保持文件系统和数据库备份同步的问题。
OTOH,使用文件系统可以使您的数据表更小,因此可以更快地从中检索记录。
在用户图像文件夹中创建一个目录
您当然不希望允许用户将内容直接上传到您的网络服务器的文档树中 - 无论您采用哪种方式,数据都应该存储在网络服务器不能直接访问但您的代码可以访问的位置。
【讨论】: