【问题标题】:Systematic way to store pictures for social website [closed]为社交网站存储图片的系统方法[关闭]
【发布时间】:2012-01-17 05:11:55
【问题描述】:
我正在构建一个用户可以上传图片的基本社交网站。我要将图像存储在文件系统上。当用户上传图片时,您认为我应该如何命名文件?我不想简单地标记图片序列号,所以我在考虑 *userid_dateinseconds_width.jpg*。
此外,我还需要在数据库中存储每张图片的相关信息——例如它属于谁、它在哪个相册中等。您建议如何构建数据库表来做到这一点?
【问题讨论】:
标签:
php
mysql
database-design
social
【解决方案1】:
我喜欢 Naterade 的回答,但我看到了一个问题。当您以这种方式命名文件时,您会将系统内部(您使用的 id)暴露给任何可以查看图像的人。 Facebook 过去以这样一种方式命名他们的图像,即用户 ID 是图像路径的一部分——结果是,如果有人从 facebook 保存并重新发布图像,通过查看文件名,人们可以追踪它在哪里图片。我会建议这样的命名方案,然后将其放入哈希中。
使用哈希还可以帮助您解决 PeeHaa 提到的目录中文件数量有限的问题。您可以散列文件名,然后将第一个字母或两个字母作为目录,从而根据您拥有的图像数量在 26 或 26^2 目录之间合理平均地分割图像。祝你好运。
【解决方案2】:
就个人而言,我会将其用作结构。如果可能的话,如果它是个人资料图片,我会调整图像大小以保持标准!
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
但这只是我!
【解决方案3】:
我最近遇到了这个问题。我是这样解决的。使用用户 ID 和随机和长字符串命名上传的图像,两者之间带有下划线。它看起来像这样 - DJ83N3D_47K23DSFGH3.jpg
要将其存储在服务器中,
为数字和字母字符创建文件夹。所以会有A-Z和0-9的文件夹。当有人上传照片时,获取用户 ID 并在其 ID 的第一个字母的文件夹中创建一个文件夹。例如:D\DJ83N3D
然后将文件上传到该文件夹,并使用随机字符串作为其名称。
例如:D\DJ83N3D\47K23DSFGH3.jpg
如果您使用 php 文件来提供图像而不是使用静态图像,则可以使用正则表达式从 url 中提取用户 ID 和文件名。