type
status
date
slug
summary
tags
category
icon
password
Property
Jul 9, 2025 07:26 AM

旧方案
去年我用 Backblaze B2 + Cloudflare 实现了免费图床(主要是给 Obsidian 用的)。介绍这种方案的文章很多,大同小异。比如下面这两篇写的很详细了:
甚至 Backblaze 官方也有文档:
这种方案有以下好处:
- Backblaze 免费账户提供 10 GB 的存储空间以及每天 1G 的下载流量。
- Backblaze 和 Cloudflare 同属带宽联盟 (Bandwidth Alliance),两者之间的流量免费。也就是说,通过 Cloudflare 访问 Backblaze 存储的图片,不计流量费。
- Cloudflare 全球有310个数据中心,有CDN加持,从任何地方访问图片都不会太慢。
- Backblaze B2 支持多种上传方式。除了 Web 界面外,还有 CLI 工具 和 Picgo 等第三方客户端。
这种方案的思路:
- Backblaze B2 公开桶 (Public Bucket) 存储图片。
- Cloudflare DNS 设置 CNAME 指向存储服务器域名 (如: f004.backblazeb2.com),实现自定义域名访问。
- Cloudflare 设置 Page Rules ,实现 URL Rewrite 隐藏真实路径。还可设置缓存时间、去除 x-bz 信息等。
旧方案不能用了
但现在 Backblaze 创建桶的策略发生了变化:必须支付一次性的费用(1 美刀),或者账户有过付费记录才可以创建公开桶(应该是防止滥用),否则只能创建私密桶 (Private Bucket)。

储存在公开桶的图片,直接访问 URL 就能看到。但私密桶的图片不行,访问 URL 是这个结果:

所以,如果不想付费的话,上述方案无效了。
直到我看到了这篇 官方文档 才知道,原来 Backblaze 早就提出新方案了。
新方案
新方案的思路是:
- Backblaze B2 私密桶存储图片。
- Cloudflare Worker 通过应用程序密钥 (Application Key) 实现认证访问 Backblaze B2 私密桶,并缓存图片。
具体流程:
- 用户访问页面,请求图片地址,触发 Cloudflare Worker ,
- Worker 用应用程序密钥签名,访问 Backblaze B2 私密桶,
- Backblaze B2 验证签名,返回图片给 Worker ,
- Worker 显示图片到页面,用户看到图片。
前提条件:
- 注册好 Cloudflare 账户
- 注册好 Backblaze 账户
- 有域名托管在 Cloudflare
- 安装好 PicGo (支持 Win/Mac/Linux 平台)
我们开始吧!
一、创建 Backblaze B2 私密桶
登录 Backblaze ,默认来到桶 (Buckets) 页面。
提示:Backblaze 的中文界面机翻味道实在太浓,请先右下角切换为 English 。
点击 Create a Bucket ,在 Bucket Unique Name 项填入桶名称(我填的 it-is-just-a-test-bucket),其余项保持默认即可。然后点击 Create a Bucket 按钮。

提示:虽然是私密桶,但桶名应尽可能复杂,避免被他人猜测到,产生不必要的麻烦。
私密桶生成了。记下 Endpoint 的值,后面要用到两次。

点击 Lifecycle Settings ,选择 Keep only the last version of the file 。点击 Update Bucket 按钮。

二、创建应用程序密钥 (Application Key)
点击页面左侧菜单 Account 项下的 Application Keys ,然后点击 Add a New Application Key ,在 Name of Key 项填写应用程序密钥名称(我填的 my-key-for-uploading),其余保持默认即可。点击 Create New Key 按钮。

创建应用程序密钥后,复制信息保存好(关掉就不再显示了!),后面要用到两次。

三、创建 Cloudflare Worker
登录 Cloudflare ,点击页面左侧菜单中 Workers 和 Pages ,右侧页面中点击 创建应用程序。

来到 创建应用程序 页面,点击 创建 Worker 按钮。

部署 “Hello World” 脚本 页面,填入 Worker 名称(我填的 test-worker),点击 部署 按钮,一个简单的 Worker 就部署好了。

点击 编辑代码 按钮,在页面中把左侧编辑区中的代码替换为以下代码:
然后点击 保存并部署 按钮。
四、配置 Cloudflare Worker
返回新创建的 Worker 页面,点击上方 设置 选项卡,再点击左侧 变量 。

点击 添加变量 按钮,依次添加 5 个变量,变量名称 和 值 分别为:
添加完后,如下图所示:

为安全起见,输入完 B2_APPLICATION_KEY 的值后,点击右侧的 加密 按钮,会显示 此值在保存后无法再进行查看 。

点击 保存并部署 按钮,完成部署。

五、自定义域名
点击左侧 触发器 ,然后点击 添加自定义域 按钮:

在 域 项填入域名/子域名(我填的 test.standat42.com),然后点击 添加自定义域 按钮:

自定义域名生效需要时间:

已生效的自定义域名:

六、配置 Backblaze B2 私密桶
回到 Backblaze ,定位到新建的私密桶,点击 Bucket Settings :

在 Bucket Info 项填入:
提示:86400 表示缓存一天,可以设置更大。

最后点击 Update Bucket 按钮。
七、访问测试
- 上传图片到私密桶
定位到新建的私密桶,点击 Upload/Download 按钮,然后继续点击 Upload 按钮,上传一个图片(如 test-image.jpg)。

- 查看图片 URL
点击图片文件名,查看图片 URL:

- 访问测试
直接访问 S3 URL (
https://it-is-just-a-test-bucket.s3.us-west-004.backblazeb2.com/test-image.jpg
) 是看不到图片的。
访问自定义域名的 URl (
https://test.standat42.com/test-image.jpg
) 则可以看到图片。
说明 Cloudflare Worker 生效了。
打开开发者工具,刷新页面,在 网络 选项卡中点击 test-image.jpg 查看,Cf-Cache-Status 的值为 HIT ,说明 Cloudflare 已经缓存成功。

八、配置 PicGo
- 安装 S3 插件
点击左侧 插件设置 ,右边搜索 S3 ,安装即可。

- 启用 Amazon S3 图床
点击左侧 PicGo设置 里,右边把 Amazon S3 启用。

- 配置 Amazon S3 图床
在左侧 图床设置 里,点击 Amazon S3 :

右边这样配置:
点击 确定 按钮。
提示:因为我上传前会把图片按日期和文章命名好,所以我在 PicGo设置 里把 上传前重命名 和 时间戳重命名 都关掉了,这样可以保证上传后图片名不会被改掉。
- 上传测试
点击左侧 上传区 ,把图片拖入右边即可上传。

上传后点击左侧 相册 ,右边可显示已上传图片。

延伸阅读
相关文章