【问题标题】: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 和文件名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-25
        • 1970-01-01
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多