Flutter应用如何打通Firestore、Backblaze B2与Cloudflare实现资源存储
实现方案按四个阶段操作即可:
1. 先完成Backblaze B2与Cloudflare CDN的预配置
- 在Backblaze B2中创建专属存储桶,关闭默认公网访问权限,配置自定义域名解析到Cloudflare节点,Cloudflare侧开启完全SSL模式,同时在B2中添加CORS规则放行你应用的域名请求,避免跨域报错。
- 生成仅对应该存储桶的上传、删除权限的B2应用密钥,密钥仅保存在服务端,禁止泄露到客户端。
2. Flutter端内容上传流程实现
- 用户选择好要发布的图片/视频后,先通过Firebase Auth获取当前用户的身份令牌,提交到后端(优先用Firebase Cloud Functions,无需单独搭服务)做身份校验,校验通过后后端用预存的B2密钥生成临时上传签名返回给客户端。
- Flutter端拿到签名后直接上传媒体文件到B2,文件路径建议按
/user/{用户uid}/{时间戳}-{随机字符串}.文件后缀格式命名,避免重名覆盖。 - 上传成功后将返回的文件路径拼接上你的Cloudflare加速域名,生成最终的资源访问链接。
3. Firestore数据关联存储
- 在Firestore中新建
posts集合,单条帖子文档至少包含以下字段:uid:发布用户的唯一IDcontent:帖子文字内容media_urls:数组类型,存储所有对应Cloudflare加速后的资源链接create_time:帖子发布时间- 其余点赞、评论数等业务字段按需添加
- 拿到所有资源链接后,将完整帖子数据写入
posts集合,同步配置Firestore权限规则:仅登录用户可发布帖子,用户仅可删除自己发布的内容,所有公开帖子支持所有登录用户读取,避免数据被恶意篡改。
4. 内容读取流程
- 首页加载帖子时直接从Firestore查询
posts集合的内容,拿到的media_urls就是已经完成CDN加速的资源链接,直接传入Flutter的图片、视频组件加载即可,Cloudflare会自动处理静态资源缓存,无需额外开发缓存逻辑。 - 若后续需要删除用户发布的内容,先调用服务端接口删除B2内对应文件,再删除Firestore中对应的帖子文档即可。
内容的提问来源于stack exchange,提问作者Mahirul Islam
相关产品推荐
相关产品推荐

