【问题标题】:Just 3 images per user, do I need to go to the trouble of creating a clever directory structure?每个用户只有 3 张图片,我需要费心创建一个巧妙的目录结构吗?
【发布时间】:2012-02-22 23:44:29
【问题描述】:

我已经阅读了几个关于将图像存储在数据库中而不是服务器上的文件夹的问题,我决定使用文件夹,但我想知道我需要多聪明。我发现了很多关于存储数千张图像的问题,但我只想为每个用户存储三张图像(实际上是三种风格的一张图像)。

this question 中,提问者首先提出了一个基于用户名的目录结构(在他的例子中,在我的例子中是一个电子邮件地址)。他的目录看起来像:

/images/domain.com/user/imagename.png

在我的情况下可以使用吗?我不是这方面的老手,所以我想知道在安全性或性能方面是否有我不应该考虑的事情。我希望将所有图像保存在 webroot 之外的文件夹中,所以我不认为用户访问他们无权查看的文件存在问题,但还有其他原因可能导致您想要获取该文件并使用它来生成目录结构或使用某种其他类型的伪随机生成的 gobbledegook 而不是用户名的一部分来生成目录结构?

编辑:我正在使用 php,如果有什么不同,这些照片只是个人资料照片。在搜索其他用户时,任何用户基本上都可以看到它们,所以在安全性方面,我只是不希望人们能够通过热链接到用户的照片或通过输入网址直接导航到照片导致它。除非,正如我所说,还有其他我应该考虑但不知道要考虑的安全问题。

【问题讨论】:

    标签: php image storage directory-structure


    【解决方案1】:

    我不明白为什么要使用散列文件除非您期望它们中的大部分是相同的;那么您可以节省大量存储空间。

    如果用户能够编辑他们的用户名(而且你无法预测未来!),那么我不会在结构中使用它。使用数据库主键或永远不会改变的东西。

    如果您确实想要更多的结构,您仍然可以跨结构级别拆分 id,例如:id 为 1234 的用户将图像存储在:

    /images/domain.com/12/34/imagename.png
    

    这至少意味着您在查看列表时没有超过一百个目录...

    【讨论】:

    • 我正要问如果用户的电子邮件地址是主键,你的建议是什么,但后来发现 this 并意识到也许我不应该将它用作主键第一名。经验教训
    【解决方案2】:

    在您说将图像存储在数据库中的大多数情况下,只是简单地说,存储在数据库中的实际内容是图像的文件名或文件路径,而不是实际图像。

    如果您已经了解这些差异并确信使用文件夹结构,那么为文件夹结构创建哈希的主要原因是防止有人将目录更改为未经授权的访问:

    /images/domain.com/itsmequinn/imagename.png
    

    并访问其他用户的文件。

    我个人不会为每个用户结构推荐一个文件夹,因为我认为这是一个混乱的解决方案。我不会对此进行详细说明,但您可以在此处查看之前的几个问题:

    Storing Images in DB - Yea or Nay?

    Store pictures as files or in the database for a web app?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2022-01-22
      • 2018-08-16
      • 2016-03-25
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      相关资源
      最近更新 更多