Skip to content

系统架构

架构目标

Misery-photo 采用轻后端模式:

  • 前端负责页面交互与展示。
  • 服务端 API 负责鉴权、桶配置管理、预签名与对象操作。
  • 媒体文件本体始终存放在对象存储,不落地到应用服务器。

核心组件

Web 应用层(Next.js)

  • 负责登录、图库浏览、上传、批量操作界面。
  • 前端不直接保存 AK/SK,敏感配置由服务端读取。

API 层(Route Handlers)

  • 认证接口:登录、登出、会话校验。
  • 图库接口:列目录、签名下载、删除、批量操作。
  • 桶配置接口:测试连接、新增编辑、激活切换。
  • 上传接口:生成 PUT 预签名 URL。
  • 代理接口:受控图片代理与可选缩略图压缩。

存储层

  • 对象存储:保存图片、视频等媒体资源。
  • KV 存储:保存桶配置状态(多桶、当前激活桶)。

关键数据流

浏览列表

  1. 前端请求图库 API。
  2. 服务端按当前激活桶生成 ListObjects 签名地址。
  3. 前端解析返回并展示文件夹与文件。

上传文件

  1. 前端调用上传接口申请 PUT 预签名 URL。
  2. 服务端返回签名 URL 与目标 key。
  3. 前端直接 PUT 到对象存储。

批量操作

  1. 前端提交路径列表和动作(copy/move/delete)。
  2. 服务端校验路径与边界条件。
  3. 服务端分批执行 S3 操作并返回结果。

安全设计

  • 所有业务 API 需通过会话鉴权。
  • 桶密钥在服务端加密持久化。
  • 代理接口强制 HTTPS 与目标域名白名单。
  • 登录接口有基础限流与失败延迟。

扩展建议

  • 若需要审计,可在 API 层增加操作日志记录。
  • 若内容规模增大,可将缩略图策略迁移到对象存储侧处理。
  • 若要细粒度权限,可引入多角色会话模型。