社交网站,用户上传的图片常用的命名和存储规则?

2014-07-24 17:21:59 +08:00
 Yuchen
自己做一个社交网站练练手,遇到了这样的问题。

1. 用户上传的图片如何命名才能保证不重复?目前的想法是文件名和时间戳的md5值。
2. 图片的存储路径?根据用户id的话,images/userid/7shd897a.jpg 这样可以吗
3. 像用户头像和相册缩略图会用到同样图片的不同尺寸,这个应该怎么处理呢,上传以后剪裁图片,服务器保存不同尺寸的图片吗?
7692 次点击
所在节点    问与答
10 条回复
qiayue
2014-07-24 17:45:02 +08:00
千万不要原名保存用户上传的文件,如有需要你可以数据库里保存原始文件名,然后服务器存储一定要自己重命名
kier
2014-07-24 17:47:23 +08:00
命名可以图片内容MD5,存储路径可以按照不同功能分目录,不同尺寸可以用nginx的插件
iyaozhen
2014-07-24 17:54:00 +08:00
1、一定要重命名,文件名+时间MD5是个常用的方法。不过貌似也有安全问题。《白帽子说web安全》那本书里有些,不记得详情了。还有就是文件名+时间可能会重名。比如说文件名也是类似时间的数字。
2、图片直接放一个文件夹吧。以userid当文件夹可能会有安全、隐私方面的问题。比如通过观察路径就可以知道哪张图片是谁的。还有就是要是你有10w个用户,就会有10w个文件夹。汗!
3、上传后生成不同的缩略图,放在不同的文件夹中。
kslr
2014-07-24 17:54:02 +08:00
命名可以是 username+时间戳 生成MD5,文件夹用MD5的前5位命名
Yuchen
2014-07-24 20:11:38 +08:00
@kslr 谢谢提供思路。不懂MD5的原理,想问下用前5位命名文件夹的话,发生碰撞的可能性大吗?
Yuchen
2014-07-24 20:15:23 +08:00
@iyaozhen 嗯 重命名肯定要,感觉用username+时间戳生成MD5的方法很好。图片放一个文件夹心理上感觉不舒服,但是也说不出哪里不好。。。
Yuchen
2014-07-24 20:17:59 +08:00
@qiayue 原始文件名应该不需要,重命名肯定要的,谢谢建议~
TangMonk
2014-07-24 20:30:01 +08:00
就和生成短链url一样,每个随机字符都是唯一值,而且速度快

我以 nodejs 举个例子:

Showfom
2014-07-25 02:06:06 +08:00
@kier 求教不同尺寸用什么 Nginx 插件?
kslr
2014-07-25 05:35:35 +08:00
@Yuchen 即使有碰撞也无妨,因为只是进行适当的分类,前5位大概有255个文件夹。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/124318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX