我在数据库中有很多记录,每条记录都有一张图片,我对如何存储图片感到很困惑。
我希望访问路由类似于/img/record-id.jpg
(即/img/15178.jpg
)。
好的,将所有图像存储在/ img /中并不是一件好事,因为会有很多。
在this question中建议反转图片名称,因此上面的示例将存储在/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输出图像,听起来有点太多了。
我真的不知道该怎么做。介意给我一些建议吗?
答案 0 :(得分:2)
你已经写完了答案!专业人士使用它完全像你(或链接问题中的人)说:构建一个适合您需求的深层目录结构。我用1600万张照片完成了这项工作,效果很好。
我是这样做的:
/ firstCharacter / secondCharacter /...
短名称的文件,如5.jpg,将在/5/5.jpg
编辑:为了保持性能最高,我完全反对任何进一步的php动作,比如salt,md5等。保持简单直接。