一个支持用户上传文件和 AI 分析的应用,真正需要保存的通常不止一份原始文件:用户上传的计划书、AI 生成的结果、外部获取的资料,最终都应该有统一的对象存储位置、元数据、权限和下载方式。
本文以一个 Go net/http + Vue 3 + PostgreSQL/MySQL 应用的实际实现为例,记录如何在保留本地存储回退能力的前提下接入 Cloudflare R2,并把 R2 配置和素材管理放进 Owner 管理后台。
Go + Vue 管理后台接入 Cloudflare R2:把上传、AI 生成和外部素材统一保存
Go 服务启动 panic:对象存储 400 不应该阻塞 API 启动
对象存储的临时故障不应该让整个 API 进程无法启动。本文记录一次 Go 服务启动时检查 S3 Bucket 收到 400 Bad Request、容器随后退出的真实排查过程,并给出一套适用于 S3 兼容存储的启动策略。
AI 生图显示 PROVIDER_SUBMISSION_UNKNOWN:真正失败在 R2 资产入库
任务状态显示 PROVIDER_SUBMISSION_UNKNOWN 时,不一定意味着模型服务没有返回结果。一次实际故障证明,供应商已经完成生图,失败发生在结果写入 R2 的最后一步。本文记录如何通过 Attempt 持久化数据还原真实数据流,并修正错误分类和凭据校验。