如何在线程中组织图像?

时间:2010-01-15 09:10:45

标签: php mysql database web-services image

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

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

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

我怎么能把一些帖子的图片连接到数据库条目?例如,如果帖子上传了5张图片,我应该有一对多(一个线程 - 多张图片)关系,其中pic条目包含图片的名称?

我以前从未这样做过。

如果有人可以给我一些建议,

会很棒。

3 个答案:

答案 0 :(得分:2)

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

  

例如,如果帖子上传了5张图片,我应该有一对多(一个帖子 - 很多图片)的关系

是的,或者一张发布许多图片?

  

其中pic条目包含图片的名称?

如果你还记得上传文件的文件名,那么它只能用于线程中的显示目的。 不要使用用户提交的文件名作为服务器文件系统上的文件名。当两个用户上传具有相同名称的文件时,这会产生冲突,无论如何,为了安全起见,“清理”用户名很难做到。

更好的是,为每个数据库图片行指定一个主键,并使用该键命名该文件,例如5272.jpeg。您还应该从不同的主机名提供上传的文件,否则会出现各种跨站点脚本风险。

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

答案 1 :(得分:1)

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

因为它比做年/蒙/日/线程更简单..

-

刚看到更新。

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

只有在您需要存储其他数据时才需要保存与帖子/帖子相关的图片/路径,例如:创作时间,评论,评分等。

答案 2 :(得分:1)

建议:

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

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

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