系统地存储社交网站图片的方式

时间:2011-12-10 00:45:23

标签: php mysql database-design social

我正在建立一个用户可以上传图片的基本社交网站。我要将图像存储在文件系统上。当用户上传图片时,您认为我应该如何命名文件?我不想简单地标记图片序列号,所以我在考虑* userid_dateinseconds_width.jpg *。

此外,我还需要存储有关数据库中每张图片的信息 - 例如它属于谁,它所在的相册等等。您如何建议将数据库表格结构化为这样做?

3 个答案:

答案 0 :(得分:0)

就个人而言,我会将其用作结构。如果可能的话,我会调整图像大小,如果它是个人资料照片,以保持标准!

id        autoincrement
u_id      id of user it belongs to
album_id  id of the album it belongs to (or name)
datetime  date and time of pic upload
path      path of where its kept, if its a directory structure

width     if you need to
height    if you need to

另外,对于文件名,我会使用:userid_imageid_datetime.jpg

但这只是我!

答案 1 :(得分:0)

我喜欢Naterade的答案,但我看到了一个问题。当您以这种方式命名文件时,您将向可以查看图像的任何人公开系统的内部(您使用的ID)。 Facebook曾经以这样一种方式命名他们的图像,即用户ID是图像路径的一部分 - 结果是,如果有人保存并从Facebook重新发布图像,通过查看文件名,人们可以追踪它在哪里图片。我会建议这样一个命名方案,但然后通过哈希。

使用哈希也可以帮助您解决问题PeeHaa提到目录中的文件数量有限。您可以散列文件名,然后将第一个字母或两个字母作为目录,从而根据您拥有的图像数量,在26或26 ^ 2个目录之间合理地平均分割图像。祝你好运。

答案 2 :(得分:0)

我最近遇到了这个问题。我这样解决了。使用用户ID命名上传的图像,并在两者之间用下划线命名随机长字符串。看起来像这样-DJ83N3D_47K23DSFGH3.jpg

要将其存储在服务器中, 创建数字和字母字符的文件夹。因此会有A-Z和0-9的资料夹。当某人上传照片时,获取用户ID并在ID为首字母的文件夹中创建一个文件夹。例如:D \ DJ83N3D

然后使用随机字符串作为名称将文件上传到该文件夹​​。 例如:D \ DJ83N3D \ 47K23DSFGH3.jpg

如果您使用php文件而非静态图片来提供图片,则可以使用Regex从网址中提取用户ID和文件名。