我正在开发一个用户可以上传图片的社交系统。
我不太确定如何构建我的文件。我有两个想法如下:
两者中的哪一个会更好?这是组织图像的正确方法吗?
答案 0 :(得分:2)
这取决于。
当您使用包含存储在每个用户的目录中的图像的库时,您还必须担心重复(例如,用户将上载具有相同名称的多个文件)。
另一方面,在第一种情况下,您可能会遇到与单个目录中的文件数相关的性能问题(如果您有超过10k的文件可能会滞后)。
我喜欢的解决方案是创建一个唯一的名称并将其裁剪成几个部分以创建目录结构。
例如:
从文件image.jpg
生成(查看the manual)一个唯一的名称,比如说
nfsr53a5gb
将原始扩展名添加到nfsr53a5gb.jpg
将/
拆分为nf/sr/53/a5/gb.jpg
Create missing folders(参见recursive
参数)
您很快就不会对目录中的文件数量进行惩罚,也不会发生冲突,文件的网址难以猜测。
一个不错的方法是添加一个控制器来获取那些将名称更改为原始名称的文件(将其存储在数据库和交换机头中)。仅将其用于专用下载按钮,因为对于页面上嵌入的许多图像,这可能是CPU和I / O密集型。
为了做到这一点,你必须修改这样的标题:
Content-Disposition: attachment; filename=YOUR_FILE_NAME.YOUR_EXTENSION
Content-Type: application/octet-stream
答案 1 :(得分:0)
转到#2选项,或者如果用户数量增加,则数字文件夹将继续增加。
要在代码中获取图像,此方法也会更简单。