Supabase Storage
用户头像与个人 Banner 的存储方案
用途
Supabase Storage 在本项目中仅用于用户个人资源的存储:
- 用户头像(
avatarsbucket) - 用户 Banner(
bannersbucket)
漫画图片资源不经过 Supabase Storage,而是由上传工具通过 Rclone 直接写入 Cloudflare R2,再由 CDN 分发。详见 CDN 架构。
设计原则
以 UUID 命名实现覆盖
客户端在上传头像 / Banner 时,将文件重命名为用户的 UUID。Supabase Storage 的 upsert 行为使得同名文件自动覆盖旧文件,无需手动删除历史版本,天然实现「新的替换旧的」。
avatars/{user_uuid}.webp ← 每次上传都覆盖同一个文件
banners/{user_uuid}.webp ← 同理强制 WebP 格式
用户原始图片格式多样(JPEG、PNG、HEIC 等),客户端在上传前统一转换为 WebP 格式,原因:
- 体积比 JPEG 小 25-35%,节省存储空间和带宽
- 所有现代浏览器和 Android 均原生支持
- 统一格式简化后端逻辑,不需要处理多种 MIME 类型
仅对会员开放
为控制存储空间和成本,头像与 Banner 的自定义上传功能仅对 VIP 会员开放。非 VIP 用户使用系统默认头像和空白 Banner。