存储用户头像的最佳方式

时间:2013-12-16 22:38:45

标签: php mysql image security file-io

我有一个网站,每个用户都有自己的个人资料页面。在这里,他们可以上传一个充当他们头像的图像。这是用户可以在整个站点上传到服务器的唯一映像。没有存档,因此如果用户希望更新其头像,则可以覆盖它。

我以前从未做过这样的事情所以我想打开它并为本网站寻求合适的,可扩展的选项。

我最初的想法是给每个用户的图像一个随机名称,一个长度为6-12个字符的字符串。这样你就无法构建一个只从目录中提取每个用户的个人资料图片的脚本(例如001.png,002.png等)。我的第二个想法是每个目录应该只有一定数量的图像,以确保服务器可以快速检索它们。

这里可能还有其他我不想要的东西,我不确定具体细节因此我会问。

3 个答案:

答案 0 :(得分:2)

我建议将图像存储在像Amazon S3这样的东西上。根据您存储的图片数量,提供的图像可以真正在您的网络服务器上拖曳。 S3是可扩展的,通过CloudFront(亚马逊的CDN版本)进行多区域部署,您可以真正加快这部分服务的速度。

答案 1 :(得分:1)

不要超载单个目录。通常,您可以看到图像根据前几个字母存储在文件夹的层次结构中。一个例子是

b5dcv5.jpg -> /b/5/b5dcv5.jpg
bsgb0g.jpg -> /b/s/bsgb0g.jpg
a5dcbt.jpg -> /a/5/a5dcbt.jpg

等等。我有你的原则。这样做的好处是,当文件名统一分布而不是O(N)时,可以在O(log N)中访问和映像,就像在单个文件夹解决方案中一样。

答案 2 :(得分:-1)

如果您想为每个用户提供临时占位符,您可以从lorempixel.com缓存随机图片:http://lorempixel.com/100/100。使用用户名称或ID的MD5哈希值。您也可以使用用户的ID保存图片,例如442.jpg

版权声明:图片为CC BY-SA