2010-01-15 35 views
2

即时通讯开发一个论坛,用户将能够上传图片。如何在线程中组织图像?

我想知道我应该如何组织这个文件夹?

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

以及我如何将一些帖子的图片添加到数据库条目中?例如,如果帖子上传了5张图片,我是否应该有一对多(一个线索 - 很多图片)的关系,其中图片条目包含图片的名称?

我从来没有这样做过。

会很棒,如果有人能给我一些建议。

回答

2

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

例如,如果后得到了5张图片上传,我应该有一个一对多的(一个话题 - 很多图片)的关系

是的,也许一个多吗?

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

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

更好的是,为每个数据库图片行分配一个主键,然后使用该键为该文件命名,例如5272.jpeg。您还应该真正提供来自不同主机名的上传文件,否则会存在各种各样的跨站点脚本风险。

请参阅this question一些背景。安全地处理用户上传的文件并不容易,几乎所有的文件上传教程都有很多安全漏洞。

+0

是的一个帖子很多图片是我真正的意思。我如何处理缩略图图像?我想在一个线程中显示缩略图,然后当用户使用鼠标指向它时,将会显示全尺寸。如果全尺寸图像被命名为123.jpg,那么这个缩略图的名字是什么?我将如何为它构建数据库? – ajsie

1

您正在问关于图像的后端存储排序,在文件系统上,对吧?因为它比做这样的事情一年/蒙脱土/天/线程更简单imagefolder/user.id/image.jpg的

..

-

刚刚看到:我会组织像这样更新。

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

仅当需要存储附加数据时才需要保存与帖子/线索相关的图像/路径,例如,创建时间,评论,评级等

+0

......听起来像是一个很好的建议...然后在数据库中,我将线程消息与一对多关系连接在一起吧? – ajsie

+0

如果你需要它,你可以将它连接起来。或者你可以去简单的方法,只需保存你的提供图像标签的HTML文章。所以你不需要额外的表格。 但是,就像我写的,这只适用于如果你不需要额外的数据或某事。 – pduersteler

1

建议:

  • 不与你的线程结构混合的文件名
  • 的文件名应该是唯一的 - 相关
  • 使用该数据库条目可能是ID文件夹系统,以限制一个文件夹中潜在文件的数量

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

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

+0

我可以问为什么一个多对多的关系?导致他们将是一个线程/张贴一个或多个图片。这对于一对多的关系来说是完美的吗? – ajsie

+0

没有特别的原因。做任何你想做的事情,但是我会把图片上传到不是特定的线程,而是上传给拥有图片的用户。这样,相同的图片可以在其他线程中重用,而无需重新上传。这是一个设计问题,如果你想要与线程相关的图像,这没有错,你可以忽略我的MN建议。 –

+0

我会在我的图片表中有“id,thread_id/post_id和user_id”,这样它仍然是用户的方向 – ajsie