存储上传的用户图片

时间:2012-08-14 17:47:42

标签: php mysql webserver

这是一个理论问题。

Twitter将用户个人资料图片保存如下:

https://twimg0-a.akamaihd.net/profile_images/2044921128/finals_normal.png

无法想象他们有一个包含2044921128个目录的服务器(例如)。也许这个URL是使用mod_rewrite创建的?

那么如何存储极大量的用户图像? 如何完成这个计划:

  1. 用户选择并且PHP脚本上传了一张应该是他的个人资料图片的图片。
  2. PHP脚本重命名它,设置PATH以存储此图像,移动它并最终将此路径添加到数据库以供进一步使用。
  3. 那么PATH必须如何?

2 个答案:

答案 0 :(得分:1)

没有什么说Akamai(根据你的URL存储Twitter的图片)实际上将文件存储在目录结构中。它们完全可能存储在内存中(由目录结构支持),数据库(SQL / NoSQL)或Akamai发现的任何其他存储机制。

您可以路由以

开头的网址的所有请求
https://yourService.com/profile_images/

到您选择的PHP脚本,然后解析其余的URL以确定正在请求的图像,并根据解析的URL从您想要的任何存储机制(可能是数据库)存储/检索。

这是一篇简短的博文,展示了使用mod_rewrite

执行此操作的一种方法

http://www.phpaddiction.com/tags/axial/url-routing-with-php-part-one/

答案 1 :(得分:1)

大多数操作系统都不鼓励在一个目录中拥有超过1024个目录/文件,因为上面的任何数字都会慢慢扫描并查找其中的特定资源,所以我认为认为akamai不会有2044921128是安全的profile_images中的目录!

它是profile_images中生成的特殊唯一标识符编号,或者使用url路由的众多方法之一可用于查找资源。在任何情况下,我认为它不会对应目录的数量..