我需要将图像数据存储在数据库中。我正在将图像上传到服务器然后,当然,我需要从数据库中检索它们。我知道在数据库中我应该只存储将实际文件留给文件系统的数据,所以我想要考虑哪一个可能是保存这些数据的最佳方法。
最让我困扰的是选择命名方案。在数据库中,我只有一个filename
列,只存储文件名和扩展名。没有路径,所以我可以在我的应用程序中配置它。那么:我应该用什么文件名?我想保留一个有意义的名字,所以保留照片标题或至少是其中的一部分会很酷。但要确保唯一性,哪一种可能是最好的方法?
我知道Codeigniter有一个字符串助手,但我也读到了使用php函数uniqid。然后我可以将id附加到图片名称。
你有什么建议?
答案 0 :(得分:1)
随意将整个图像存储在数据库中,只要不会有数十万个(或者您只是为昂贵的SCSI驱动器付费:))。如果您不确定,文件系统也可以。
对于图像的唯一ID,最好的方法可能就是使用数据库插入ID(保证唯一,没有线程/碰撞/哭泣)。所以这是一个很好的方法,假设你想将图像保存在文件系统中:
create table images (
image_id int(20) primary key auto_increment, /* assumes mysql */
file_path varchar(2500) not null, /* the actual file name and full path */
file_label varchar(255), /** user's memorable name for the file */
description varchar(2500), /** user provided description of contents */
media_type varchar(100), /** something like image/jpeg; privided by php in upload */
);
然后你可能想要将image_id与某种分类或标签,user_id等连接。
修改强>
已添加评论:
如果您愿意,您始终可以使用真实文件名构建链接,即使您将它们存储为文件系统中的图像ID也是如此。你只需要利用search friendly urls来做这样的事情(其中1234是图像id和/ images /重定向到你的php脚本):
mysite.com/images/db/1234/picture_of_a_cat.jpg)
然后你只需将/ images / db /重定向到你的php脚本。或者,如果您不想尝试重写它们,可以使用$ PATH_INFO。
例如,如果你有mysite.com/images/render.php/1234/picture_of_cat.jpg:
<?php
$parts = explode("/",$PATH_INFO);
$image_id = $parts[3];
$image_from_db = null; //fetch the row from your dabatase here!
header("Content-type: ".$image_from_db['media_type']);
echo file_get_contents($image_from_db['file_path']);
祝你好运! ;)
答案 1 :(得分:0)
好吧,我更喜欢你在图像名称中使用哈希值,如果有两个同名图像会发生这种情况,并会产生未来的问题。
另一个提示,永远不要将文件内容存储在数据库中,其成本远远高于存储该文件的路径。
答案 2 :(得分:0)
将图像存储在数据库中并不是一个好主意,而是将链接存储到数据库中的图像。 例如; 创建一个包含以下字段的表
您可以添加任何其他您想要的字段