🌲[bamboo] 文件上传与管理

项目地址: GitHub - bamboo-cms/bamboo: A CMS optimized for conference hosting
难度:中等

  • 实现文件上传的端点,并对上传文件进行验证。
  • 支持使用 PIL 对上传的图片(profile image)裁剪出不同尺寸,这一步可以用任务队列完成,由于整个项目任务不重,可以用

(可能需要拯救)

我要认领(bestcondition

1 Like

目前是这样设计的,是否可以满足需求?

目录

media
├── original
│   ├── 1_ea8e.jpg
│   ├── 2_4da0.ppt
│   └── 3_f03f.jpg
└── small
    ├── 1_ea8e.jpg
    └── 3_f03f.jpg

解释

  1. 命名规则{db_id}_{uuid[:4]}{suffix}
  2. small中的图片由rq的worker异步生成
  3. media文件夹会挂到前端容器中,nginx加一个端点
  4. 数据库path字段只存文件名,至于使用原图还是缩略图前端通过路由区分

疑问

  1. 由于是统一的上传接口,不同场景对图片宽高有不同要求,所以对图片宽高的限制是否可以在前端做,后端对图片大小做限制,例如不超过20M
  2. 缩略图我想到两种方式,一种将原图宽高按照固定缩放比例缩放,例如宽高变为原来的30%;另一种是设定缩放后的最大宽高,按照某个比例等比缩放,恰好不超过设定的最大宽高,例如设定(500,500),原图是(1000,600),缩略图是(500,300);
1 Like

存储目录设计上我在想是不是不用拆分目录?所有文件都在 media 下,然后缩略图在文件名后加后缀(比如 small)。

针对疑问,我同意在前端做尺寸限制,比如上传讲师或组织者的头像图片默认按照要求比例进行裁剪。

cc @frostming

  • 缩略图加后缀 :white_check_mark:
  • 前端限制 size :white_check_mark:

也可以,那缩略图的文件名就是1_ea8e_small.jpg

已提pr

1 Like