我以前回答过类似的问题,但我找不到它,也许OP删除了他的问题......
无论如何,Adams解决方案似乎是迄今为止最好的,但它并不是防弹的,因为(或任何其他dir/subdir对)仍然可能包含多达16 ^ 30个唯一哈希值,如果我们计算图像扩展名,则至少可以多3倍的文件,远远超过任何常规文件系统可以处理的文件。images/c/cf/
AFAIK,SourceForge.net 也将此系统用于项目存储库,例如,“fatfree”项目将被放置在 ,但是我相信他们将项目名称限制为8个字符。projects/f/fa/fatfree/
我将图像哈希与/ / 字段一起存储在数据库中,指示图像何时上传/处理,然后将图像放在这样的结构中:DATE
DATETIME
TIMESTAMP
images/
2010/ - Year
04/ - Month
19/ - Day
231c2ee287d639adda1cdb44c189ae93.png - Image Hash
艺术
images/
2010/ - Year
0419/ - Month & Day (12 * 31 = 372)
231c2ee287d639adda1cdb44c189ae93.png - Image Hash
除了更具描述性之外,这种结构足以在几千年内每天托管数十万张(取决于您的文件系统限制)的图像,这就是Wordpress和其他人这样做的方式,我认为他们在这个问题上做对了。
复制的图像可以很容易地在数据库中查询,你只需要创建符号链接。
当然,如果这对您来说还不够,您可以随时添加更多的子目录(小时,分钟等)。
就个人而言,除非您的数据库中没有该信息,否则我不会使用用户ID,因为:
- 在网址中披露用户名
- 用户名是易失性的(您可以重命名文件夹,但仍然...)
- 用户可以假设上传大量图像
- 没有任何目的(?
关于CDN,我看不出这个方案(或任何其他方案)有任何理由不起作用......