Cloudflare + Blackblaze b2 私有 bucket 搭建图床

在理论上, 理论和实践是没有差异的; 但在实践中, 是有的。 In theory, there is no difference between theory and practice. But in practice, there is. --Snepscheut
· 121字 · 1分钟

总体流程 🔗

总体流程时序图

流程说明 🔗

  1. blackblaze 使用用户或应用 keyId,key 调用 b2_authorize_account 接口取得 authorizationTokenapiUrldownloadUrl
  2. 继续在 blackblaze 使用上一步取得的 authorizationTokenapiUrl 调用 b2_get_download_authorization 接口取得 authorizationToken
  3. cloudflare Worker > KV > 创建命令空间取得对应 id
  4. cloudflare 使用 api token 将第 1 步的 downloadUrl 和 第 2 步 authorizationToken 存第 3 步创建的 KV 存储中
  5. cloudflare 上传脚本到 worker 并装其与第 3 步创建的 KV 存储绑定,这样就能在脚本中使用存入的数据访问 blackblaze 私有桶中的图片
  6. 由于第 2 步获取到的 token 有效期最长为 7 天(第二个参考资料,未验证), 所以需要制定合理的定时任务计划
  7. token 刷新程序 https://github.com/lostsquirrel/b2auth-cfworker-go
  8. worker 脚本 https://github.com/lostsquirrel/b2worker,基本功能实现,

TODO 🔗

  • token 刷新程序

    • 基本还未完成
    • 添加使用文档
    • 减少手动操作
  • worker 脚本

    • 添加异常处理,
    • 防盗链方案,
    • 增加配置减少手动操作

遇到的坑 🔗

  • cloudflare worker 在使用 KV 存储时需要在函数中传入 request 外的另一个参数 env, 通过 env.KVNAME.get('my-key') 在能访问到其中的内存,否则会报 KVNAME 不存在
  • 使用 wrangler 本地调度 worker 脚本时,不使用代理访问不到,使用代理会报 ssl 版本错误,暂没办法解决,目前使用 gitpod 暂时规避

参考资料 🔗

🔗

参考资料2 中使用将 `token` 直接写入脚本然后,第次上传新脚本的方式,这样需要每次更新脚本,但避免了引入使用 KV 的复杂度