Tanplate Docs

Storage

Cloudflare R2、Projects 与 User Assets 的隔离对象存储和安全读取边界。

Tanplate 的对象存储 Provider 固定为 Cloudflare R2。Projects 媒体与用户私有上传使用不同 bucket,避免公开发布资产和 owner 私有文件共享访问策略。

资源派生

能力R2 binding用途
ProjectsPROJECT_ASSETS_BUCKETProject 图片、视频与发布媒体
User AssetsUSER_ASSETS_BUCKET登录用户的私有上传

Manifest 关闭对应能力时,初始化器不会为该能力要求 bucket。Admin 只有在部署且管理该模块时才共享对应 binding;Docs 不绑定 R2。

访问边界

浏览器不直接访问 bucket。请求先进入同源 Web/Admin route,再完成 Session、owner、audience、MIME/signature、配额和对象状态检查。

Projects 的公开媒体支持受控的 ETag、Range 和公共缓存;authenticated audience 与 User Assets 始终返回 private, no-store。Admin 的跨 owner 读取和删除必须通过授权包装,并写入 correlated audit。

D1 与 R2 一致性

D1 保存对象元数据和生命周期状态,R2 保存 bytes。上传、发布和删除必须走 @tanplate/projects@tanplate/user-assets service,不能在 route 中分别裸写两个资源。

User Assets 使用五态生命周期和幂等键;Projects 使用 revision、发布状态和补偿删除。部分失败由 repair/data operation 恢复,不通过隐藏重试伪装为成功。

自定义

新增文件类型时,同时更新结构化 MIME/signature 校验、大小/配额、响应头、测试 fixture 和文档。不要只依赖客户端 accept 或上传请求声明的 Content-Type。

关系数据与迁移见 Database,环境资源见 Cloudflare

On this page