我正在为一个基本的照相馆设计数据库,每个用户都可以上传几个图像.
现在这就是我所拥有的:
照片库
photo_id - image - sort_order - user_id
1 - test.jpg - 1 - 1
2 - another_photo.jpg - 2 - 1
然后在我的文件夹结构上,我将创建一个新文件夹,如下所示:
images / photo-gallery /并将图像存储在其中.现在,我应该为每个user_id创建一个文件夹并将其特定图像存储在该文件夹/
因此,在这种情况下:
images / photo-gallery / 1 / test.jpg和用户1的所有照片都在那里?
另外,为了调整大小,我正在考虑使用smart image resizer,这样我就可以存储原始照片,并且如果要将其调整为特定大小,可以使用以下脚本来调用它:/image.php?width= 200& height = 200& image = test.jpg.
我应该对这些文件名进行哈希处理吗?我还有什么想念的吗?关于如何改善这一点的任何建议?
谢谢!
解决方法:
Now, should I create a folder for each user_id and store their specific images in that folder?
是的,以某种方式分隔上载是个好主意,这样您就不会以拥有数万个文件的目录结束.您可以按用户ID,首字母(例如images / t / te / test.jpg)或哈希(例如images / 0e / 0e4fab12.jpg)将它们分开.
Should I be hashing these file names?
这取决于您要完成的工作.由于您打算在URL中引用文件名,因此使用一个已知的“安全”字符集存储文件名可能是一个优点:
image.php?image=c/ca/cat%20farting%20On%20a%20lemon.jpg
-- vs --
image.php?image=0a/0a1b2c3d.jpg
但是,如果您这样做,我建议您扩展数据库架构以包括原始文件名:
photo_id | image | orig_fn | sort_order | user_id
1 | 0a/0a1b2c3d.jpg | charginLazors.jpg | 1 | 2
您可能还会考虑存储有关图像的其他元数据,例如上载日期,标题等.
关于文件夹结构,可以考虑使用文件名中的任意数量的字符,尽管需要考虑一些事项:
使用创建十六进制文件名的哈希方法意味着子文件夹的最大数量将是16的倍数.
>一个字符-16个子文件夹
>两个字符-256个子文件夹
>三个字符— 4096个子文件夹
如果使用两个以上的字符,则建议进一步嵌套文件夹:0a / 0a12 / 0a12bd31.jpg-或-0a / 12 / 0a12bd31.jpg.这使得导航/管理文件更加易于管理(IMO)
请记住,使用的前缀字符越多,每个文件夹中的文件就越少.如果期望高容量,则可以选择具有更多文件夹,每个文件夹较少文件.