2

我在数据库中有很多记录,每条记录都会有一个图像,我对如何存储图像感到很困惑。

我希望访问路线类似于/img/record-id.jpg(即/img/15178.jpg)。

好吧,将所有图像存储在 /img/ 中并不是一件好事,因为会有很多。

这个问题中,建议颠倒图像的名称,因此上面的示例将存储在/img/78/51/15178.jpg. 该建议不会提供有关其他情况的更多信息(对我来说这并不明显)。如果 id 是像 5、15、128、1517 这样的低数字,会发生什么(在最后一条评论中询问答案)?

撇开这些不谈,让我们记住我想要的路径是/img/15178.jpg. 我会使用 Apache 重定向请求,但为此我必须为不同的 ID 号键入至少 3 个或更多规则:

  • ^/img/(\d)(\.jpg)$/img/$1$2
  • ^/img/(\d\d)(\.jpg)$/img/$1/$1$2
  • ^/img/(\d\d)(\d\d)(\.jpg)$/img/$1/$2/$3
  • 等等?

这似乎不是一个好的解决方案,尽管它可以正常工作。

我可以想到其他选项:获取图像的 MD5,将其存储在相应的记录中,将请求重定向到 PHP 脚本并让它处理输出。

该脚本将在 MD5 中查找数据库中的 id,从散列中构建实际路由并输出图像。这个方案比较简洁,但是输出图片需要用到数据库和PHP,听起来有点过头了。

我真的不知道在这里做什么。介意给我一些建议吗?

4

1 回答 1

2

你已经写出了完美的答案!专业人员使用它的方式与您(或链接问题中的人)说的完全一样:构建适合您需求的深层目录结构。我已经用 1600 万张图片做到了这一点,而且效果很好。

我是这样做的:

/第一个字符/第二个字符/...

具有短名称的文件,例如 5.jpg,将位于 /5/5.jpg

编辑:为了保持性能领先,我完全反对任何进一步的 php 操作,如 salt、md5 等。保持简单明了。

于 2012-05-17T15:03:03.047 回答