主要问题
使用对象储存存储图片,但现有的对象存储依赖登录管理后台较为繁琐,二来官方界面也不是专门为图床设计的,在管理图片上有所不足。
解决方案
设计一套在线工具提供
- 创建时间
- 修改时间
- 相册
- 标签
四中模式进行分类管理查看,项目主要为个人设计,不想引入太过复杂的配置以及减少管理搭建成本,所以需要尽量少引入云设备。最终决定只依赖对象储存实现,数据管理使用json文件。
由于文件名在管理图片方面比较复杂也不太实用,上述给出四种视图已经足以满足日常查看管理需求,所以决定统一以hash值为文件名唯一标识图片文件。
为此的优点有:
- hash作为文件名可以较为简单的辨别出重复图片上传的问题
- hash作为文件名便于在其他数据文件中定位图片
- 由于对象存储设计原理上支持列出前缀相关文件,hash作为文件名后仅仅使用hash就能定位到文件而不需要考虑气候的后缀,进而不用管理各种图片格式不同带来的问题
项目数据文件夹结构设计
.data
├── create
│ ├── 2025-01-17.data
│ ├── ...
│ └── 2025-01-19.data
├── modify
│ ├── 2025-01-17.data
│ ├── ...
│ └── 2025-01-19.data
├── album
│ ├── 旅游
│ │ ├── 00.data
│ │ ├── ...
│ │ └── ff.data
│ ├── 美食
│ │ ├── 00.data
│ │ ├── ...
│ │ └── ff.data
├── tag
│ ├── 标签1
│ │ ├── 00.data
│ │ ├── ...
│ │ └── ff.data
│ ├── 标签2
│ │ ├── 00.data
│ │ ├── ...
│ │ └── ff.data
数据文件夹create
create中存放文件以年-月-日命名的数据文件,其中都是当日上传的文件hash以特殊字符’\n’风格,例如:
a1b2c3d4e5f67890
1234567890abcdef
fedcba0987654321
由于创建时间不可更改,且一天上传的图片正常情况下不太可能达到几百张的地步,计算
100*(8b+1b)=900b
100张图片(hash所占大小+换行符所占大小),由此可见可以将create下文件限制在1kb以内,在加上创建时间不可更改(除删除文件时)大多数访问均为下载使用无需频繁上传下载进行修改,所以这样的存储方法已经够用
数据文件夹modify
修改日期大部分应该与创建日期相同即没有进行修改,所以修改日期采用在创建日期的基础上记录差异即可,简单来说如果一张在1月12号的日期被在1月18号修改,则只需要在修改日期文件夹下的1月12号中记录移除条目,1月18号中记录增加条目即可。
数据文件夹相册与标签
相册标签本质上是同一类东西,他们的表示方法也大致相同
我们