用户生成内容 (UGC) 是现代应用程序的重要组成部分。这包括用户上传个人照片、文档和视频,以及 AI 模型生成图像、摘要或结构化数据。因此,应用程序需要一个可靠、可扩展且高性价比的解决方案来存储和访问这些内容。
Cloudflare R2 是一个具有零出口费用的 S3 兼容对象存储,非常适合大规模处理内容上传和交付。结合 Cloudflare Workers 和 Cloudflare 全球网络,它为摄取和管理 UGC 提供了快速、安全且高性价比的工作流。
本参考架构探讨了两种常见的 UGC 工作流,两者均针对性能、安全性和成本效率进行了优化:
- 通过签名 URL 将用户上传安全存储到 R2: 允许用户高效、安全地上传文件(个人图像、文档等),而不会对后端系统造成过载。
- AI 生成内容存储到 R2: 存储由 Workers AI 或外部 AI 服务生成的内容,确保推理结果可持久保存以供将来使用。
用户生成内容通常从文件上传开始,包括个人照片、简历、富媒体和文档。应用程序必须在避免延迟、高成本和不必要的后端复杂性的同时,安全地验证和存储这些上传内容。
在此架构中,我们使用 R2 作为主要存储层,使用 Worker 控制上传访问权限。文件通过签名 URL 从用户的浏览器或设备直接上传到 R2,签名 URL 由 Worker 在验证用户权限和上传意图后生成。
这种方法避免了通过应用程序后端或 Worker 路由大文件,降低了延迟和运营成本,同时确保对访问和安全性的严格控制。
由于 R2 与 Cloudflare 全球网络原生集成,存储在 R2 中的文件可以从世界任何地方以低延迟访问——而且无需任何出口费用,即使您的应用程序规模扩大也是如此。
工作原理
- 用户从前端发起上传: 应用程序收集文件详情(如大小、名称),并调用后端 API(Cloudflare Worker)以开始上传流程。
- Worker 验证用户身份并验证请求: Worker 确认用户已登录、拥有上传权限,且文件在可接受的限制范围内(例如,最大 10MB,允许的 MIME 类型)。
- Worker 向 R2 返回签名 PUT URL: 签名 URL 允许前端在有限时间内直接上传到 R2,限定在特定键或命名空间下。Worker 无需直接处理大文件。
- 前端直接将文件上传到 R2: 文件从客户端直接流式传输到 R2。
- (可选)触发上传后工作流: R2 提供事件通知,在 R2 存储桶中的数据发生变更(如新上传)时向队列发送消息。后处理示例:
- 扫描、审核或转换文件。
- 将元数据(例如
user_id、file_path、timestamp)写入 D1(Cloudflare 的无服务器 SQL 数据库)。 - 通知用户或更新仪表板/UI。
有关从客户端直接上传数据到 R2 的更多信息,请参阅预签名 URL 文档。
许多现代应用程序利用 AI 生成内容,包括产品描述、个人照片、音频片段等。当这些内容响应用户操作或计划事件而创建时,必须立即、可靠地大规模存储。
此架构采用 Workers AI 在边缘执行推理,然后在单个 Worker 中将生成的输出直接存储到 Cloudflare R2。
工作原理
- 用户发起内容生成: 前端向 Cloudflare Worker 发送请求,使用 AI 模型创建内容(例如,"为该产品创建缩略图")。
- Worker 调用 Workers AI: Worker 将用户输入传递给部署在 Workers AI 上的模型。
- 生成的输出返回给 Worker: 响应可以是纯文本、Base64 图像、二进制缓冲区或其他结构化数据——取决于模型类型。
- Worker 直接将输出上传到 R2: 无需签名 URL 或客户端上传。Worker 执行安全的已认证
PUT请求,将输出存储到指定存储桶。 - Worker 向前端返回成功和元数据: 客户端收到对已存储文件的引用(如路径、对象键,或在需要时提供签名下载 URL)。
有关通过 Cloudflare Workers 访问 R2 存储桶的更多信息,请参阅从 Workers 使用 R2。
通过将用户生成内容存储在 Cloudflare R2 中,应用程序获得:
- 高度可扩展的存储后端
- 通过 Cloudflare 边缘计算实现快速访问
- 零出口费用带来的可预测成本
- 最大化效率的无缝 AI + UGC 工作流
此架构确保内容的存储、处理和交付快速、安全且高性价比。