V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Yuchen
V2EX  ›  问与答

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

  •  
  •   Yuchen · 2014-07-24 17:21:59 +08:00 · 7736 次点击
    这是一个创建于 3803 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自己做一个社交网站练练手,遇到了这样的问题。

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

    我以 nodejs 举个例子:

    Showfom
        9
    Showfom  
       2014-07-25 02:06:06 +08:00
    @kier 求教不同尺寸用什么 Nginx 插件?
    kslr
        10
    kslr  
       2014-07-25 05:35:35 +08:00
    @Yuchen 即使有碰撞也无妨,因为只是进行适当的分类,前5位大概有255个文件夹。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2562 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:50 · PVG 13:50 · LAX 21:50 · JFK 00:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.