2011-09-03 142 views
0

我正在编写一个简单的图像托管服务,其中每个图像及其所有缩略图只能通过其名称提供,例如, i.example.com/ XXXXX.jpg。这样做的问题是,每个图像和每个缩略图必须位于一个可能快速增长的目录中(i.example.com的文档根目录)。我宁愿每个图像都在每个用户的单独文件夹中。将通用URL路径映射到特定文件

由于我无法确定哪个图像属于单独URL中的哪个用户,我以为我需要编写自己的脚本来为用户查询数据库,而不是为图像提供服务。这个问题将是大量的数据库查询。在我的网站上,我有一个一次显示60张图像的图库,这为每个访问者请求图库中的页面提供了60个查询。

我可以使用memcached,但除非将每个数据库查询结果保存到一个数组中,否则这只会用60个memcached查询替换60个数据库查询。

这一切对我来说似乎都不是最理想的,所以我想知道是否有更好的解决方案,或者我应该把每个图像放到一个目录中?

回答

3

您可以使用第一个字母,然后第二个等等来根据名称对图像进行分区。例如,图像dog.jpg将被存储在/path/to/images/d/o/dog.jpgcat.jpg/path/to/images/c/a/cat.jpg。您的网络应用程序需要进行路径转换,但不需要点击数据库。如果两个人上传具有相同名称的图像,则会出现问题。

+0

每张图片上传后都会重新命名为一个唯一的随机字符串,所以这对我的系统来说效果会很好。我喜欢这个主意,谢谢! – Steffen

0

如果您希望在不同的人上传同名图像时区分图像,则不能将所有图像放在一个目录中。当您想要上传图片并确保属于某个特定人员的所有图片不断进入个人目录时,您必须使用诸如www.example.com/images/user_id/xxxxxxx.jpg之类的内容;并且您必须确保所有用户都登录以提供他们的目录标识;这样,无论您是否访问数据库,user_id目录都会为不同的人保留不同的身份。示例:具有user_id = 231的用户将拥有www.example.com/images/231/xxxxxx1.jpg(或www.example.com/images/portrait_231/xxxxxx1.jpg),如果您作为开发人员想要创建更多比每个用户的一个子目录)。如果你仍然不明白我的意思,请给我发电子邮件@ [email protected]:我一直在研究图像超过一年了!

+0

好吧,我的观点是我不希望用户的ID在URL路径中,我希望网址短而且匿名。 – Steffen