【问题标题】:how to organize images in threads?如何在线程中组织图像?
【发布时间】:2011-01-05 10:36:09
【问题描述】:

我正在开发一个论坛,用户将能够上传图片。

我想知道我应该如何为此组织文件夹?

它们应该按线程或用户排序吗?但是如何在这些文件夹中组织它们?

我如何将一些帖子的图片与数据库条目结合起来?例如,如果帖子上传了 5 张图片,我应该在图片条目中包含图片名称的一对多(一个线程 - 多张图片)关系吗?

我以前从未这样做过。

如果有人能给我一些建议,那就太好了。

【问题讨论】:

    标签: php mysql database web-services image


    【解决方案1】:

    您是否希望一次性处理/复制/传输/删除一个线程的图像?如果是这样,为每个线程创建一个文件夹可能是有意义的。否则不会有什么特别的好处。事实上,这可能是一个缺点......例如,如果您可以将帖子从一个线程移动到另一个线程或合并线程,那么您必须编写额外的代码来移动图像文件。

    例如,如果帖子上传了 5 张图片,我是否应该建立一对多(一个线程 - 多张图片)关系

    是的,或者一张张贴多张图片?

    图片条目在哪里包含图片的名称?

    如果您记得上传文件的文件名,它应该仅用于在线程中显示。 不要使用用户提交的文件名作为服务器文件系统上的文件名。当两个用户上传同名文件时,这种风险会发生冲突,无论如何“清理”用户名以确保安全很难做到正确。

    最好给每个数据库图片行一个主键,并使用该键来命名文件,例如5272.jpeg。您还应该真正从不同的主机名提供上传的文件,否则会有各种跨站点脚本风险。

    有关背景信息,请参阅this question。安全地处理用户上传的文件绝非易事,几乎所有的文件上传教程都充满了安全漏洞。

    【讨论】:

    • 是的,一个帖子很多照片是我真正的意思。我如何处理缩略图?我想在线程中显示缩略图,然后当用户用鼠标指向它时,将显示完整尺寸。如果完整尺寸的图像命名为 123.jpg,缩略图的名称将是什么,我将如何为其构建数据库?
    【解决方案2】:

    您是在询问文件系统上图像的后端存储排序,对吧?我会这样组织它:imagefolder/user.id/image.jpg

    因为它比年/月/日/线程之类的操作要简单得多..

    --

    刚刚看到更新。

    对于您的数据库部分,我想说您实际上并不需要将其保存在单独的表中。如果您连续保存线程的帖子,您可以在其中保存 html 并提供一些窗口,用户可以在其中检查他想要插入/上传的图像。这会相对于保存的位置写入相应的 html 标记。所以基本上只是像 stackoverflow 这样的编辑器的扩展。

    仅当您需要存储其他数据时才需要保存与帖子/线程相关的图像/路径,例如创建时间、cmets、评级等。

    【讨论】:

    • 正是...听起来不错的建议...然后在数据库中我将​​线程消息与一对多关系耦合对吗?
    • 如果需要,您可以将其连接起来。或者您可以采用简单的方式,只需将您的帖子 html 保存在提供图像标签的位置。所以你不需要额外的桌子。但是,就像我写的那样,这仅在您不需要额外数据或某事时才有效。
    【解决方案3】:

    建议:

    • 不要将文件名与线程结构混在一起
    • 文件名应该是唯一的 - 可能是相关的 db 条目的 id
    • 使用文件夹系统来限制一个文件夹中潜在文件的数量

    我使用了类似 1.jpg、2.jpg 的图像名称。每个文件夹有 1000 张图像,前 1000 张图像的文件夹名称为 00000001(千位数字填充 0 到 8 位数字)。这将允许您存储 100.000.000.000 张图像并快速访问。

    图像和线程的关系应该是一个MN表,其中threadID和imageID有2个索引。

    【讨论】:

    • 我能问一下为什么是多对多的关系吗?因为他们将是一个线程/帖子,带有一张或多张图片。那么这对于一对多的关系来说是完美的吗?
    • 没有特别的原因。做任何你想做的事,但我会在上传时将图像关联到不是特定线程,而是与拥有图片的用户关联。这样可以在其他线程中重复使用相同的图片,而无需重新上传。这是一个设计问题,如果您想要与线程相关的图像,那没有错,您可以忽略我的 MN 建议。
    • 我将在我的图片表中包含“id、thread_id/post_id 和 user_id”,因此它仍然是面向用户的
    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 2011-09-08
    • 2016-08-24
    • 2016-05-09
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多