系统架构
架构目标
Misery-photo 采用轻后端模式:
- 前端负责页面交互与展示。
- 服务端 API 负责鉴权、桶配置管理、预签名与对象操作。
- 媒体文件本体始终存放在对象存储,不落地到应用服务器。
核心组件
Web 应用层(Next.js)
- 负责登录、图库浏览、上传、批量操作界面。
- 前端不直接保存 AK/SK,敏感配置由服务端读取。
API 层(Route Handlers)
- 认证接口:登录、登出、会话校验。
- 图库接口:列目录、签名下载、删除、批量操作。
- 桶配置接口:测试连接、新增编辑、激活切换。
- 上传接口:生成 PUT 预签名 URL。
- 代理接口:受控图片代理与可选缩略图压缩。
存储层
- 对象存储:保存图片、视频等媒体资源。
- KV 存储:保存桶配置状态(多桶、当前激活桶)。
关键数据流
浏览列表
- 前端请求图库 API。
- 服务端按当前激活桶生成 ListObjects 签名地址。
- 前端解析返回并展示文件夹与文件。
上传文件
- 前端调用上传接口申请 PUT 预签名 URL。
- 服务端返回签名 URL 与目标 key。
- 前端直接 PUT 到对象存储。
批量操作
- 前端提交路径列表和动作(copy/move/delete)。
- 服务端校验路径与边界条件。
- 服务端分批执行 S3 操作并返回结果。
安全设计
- 所有业务 API 需通过会话鉴权。
- 桶密钥在服务端加密持久化。
- 代理接口强制 HTTPS 与目标域名白名单。
- 登录接口有基础限流与失败延迟。
扩展建议
- 若需要审计,可在 API 层增加操作日志记录。
- 若内容规模增大,可将缩略图策略迁移到对象存储侧处理。
- 若要细粒度权限,可引入多角色会话模型。