2010-12-05 65 views
2

我想知道什么是最好的文件夹结构的Web应用程序来保存用户图片,如果他们有不同的用户名和不同的相册。我使用亚马逊S3,文件夹和水桶图像文件结构和编码文件名。 like Facebook image Url

我不希望人们能够预测用户/相册中的URL喜欢FB

http://sphotos.ak.fbcdn.net/hphotos-ak-snc4/hs1189.snc/154140_10150322456245277_731310276_15908482_4918209_n.jpg

而且作为文件名。什么是最好的类型的信息编码来改变文件名。 (用户名,日期/时间,用户ID) E.g.

原文: apple.jpg

编码: 1263547483_56783929_3934736_943883.jpg

你会用什么来编码这些网址安全的文件名? Base64,MessageDigests?

回答

1

我会创建“随机”文件名。这些文件可以保存在一个目录中,也可以保存在生成​​的目录结构中,如dir01,dir02,dir03。单独的目录对于大量的文件来说更好。我认为你不应该在一个目录中存储10K以上的文件。如果您有更多的文件,每次计数器到达10K时都会创建新的目录。

包含文件系统中物理路径的文件的所有元数据都应存储在数据库中。 Files表可能包含用户表的外键,因此您始终可以知道该文件的所有者。

这种设计是可扩展的:将来您可以在不同的磁盘上存储不同的目录,甚至可以使用CDN系统。这足够安全。不可能猜到你如何将文件元数据编码到文件名中,因为你不编码任何东西:你只需要创建随机名。这很简单,&强大。所有数据均以数据库形式存在,因此您可以在将来添加新功能并在数据库中的旧数据上运行它们。

1

使用ex Base64进行编码看起来不太好。我会简单地用GUID替换文件名,并在数据库中有一个映射文件和GUID的映射。

喜欢的东西:

http://photos.site.com/{account-id}/{gallery-id}/{image-guid}.jpg 

这将导致:

http://photos.site.com/23323/323/F66A80B2_007F_11E0_86C8_322ADFD72085.jpg