使用 PicGo + Cloudflare R2 打造免费图床 (Mac版)
最近从 Windows 迁移到了 Mac 阵营,为了在写 Markdown 文档时能顺滑地插入图片,重新在 Mac 上配置了 PicGo + Cloudflare R2 作为图床。为了防止自己以后忘记配置细节(特别是 Mac 专属的几个坑位和 S3 插件的新版规则),这里简单记录全过程。
一、为什么选择 Cloudflare R2 做图床?
当我们写文章(比如博客、技术笔记)时,如果图片直接保存在本地,一旦把文章发到网上或者分享给别人,图片就会全部裂掉。我们需要一个“云端大仓库”来存放图片,并生成一个随时随地都能访问的网址。传统云存储和Cloudflare R2 存储桶对比如下:
-
传统云存储(图床)和 Cloudflare R2 的对比 以前很多人用阿里云 OSS、腾讯云 COS 或者七牛云做图床。它们确实快,但有一个致命缺点:下行流量收费。 你的文章一旦火了,几千人阅读并加载了你的图片,云厂商就会向你收取高昂的流量费。很多技术博主都曾经历过一觉醒来被天价账单“刺客”击中。
-
Cloudflare R2 的底层逻辑与传统的对象存储类似,但它依托于 Cloudflare 强大的全球 CDN 网络,推出了一个绝杀特性:下行流量完全免费 (Zero Egress Fees)。 配合它慷慨的免费额度(自带 10GB 容量,每月 1000 万次免费读取),对于个人写作者来说,这不仅是一个纯免费的完美图床,更永远不用担心被恶意刷流量导致破产。此外,R2 全面兼容 S3 标准协议,使得第三方工具(如 PicGo)能非常轻松地接入。
二、准备工作与核心组件
在开始配置前,需要梳理一下整体架构。我们将图片从本地传到云端,再生成链接,需要以下几个核心环节:
| 核心组件 | 功能说明 | 部署/获取方式 |
|---|---|---|
| PicGo (Mac) | 图床的核心搬运工与前台界面。负责监听截图、上传图片、生成 Markdown 链接。 | 通过 Homebrew 或者在官网安装 |
| S3 插件 | 充当“翻译官”,让 PicGo 能用标准的 S3 协议与 Cloudflare 沟通。 | 在 PicGo 插件市场搜索安装 |
| Cloudflare R2 | 云端图片大仓库(Bucket),负责永久保存图片。 | Cloudflare 控制台创建 |
| API 令牌 (Token) | PicGo 访问 R2 仓库的“专属门禁卡”。 | Cloudflare R2 管理面板生成 |
| 自定义域名 | 绑定的私人域名(如 img.xxx.com),让链接更短且完全可控,未来换图床也无需修改文章。 | 在自己 Cloudflare DNS 解析配置 |
详细部署实战:Mac 端的避坑与连通
1. Mac 端环境预置与软件安装 (极易踩坑)
在 Mac 上安装 PicGo,推荐使用 Homebrew,并且需要准备 Node.js 环境以支持插件下载。 打开“终端 (Terminal)”,依次执行:
# 安装 Node.js 环境(PicGo 插件底层依赖)
brew install node
# 一键安装 Mac 版 PicGo
brew install --cask picgo
Mac避坑: 由于 macOS 的安全机制,第一次打开 PicGo 极大概率会报错提示“软件已损坏,无法打开,您应该将它移到废纸篓”。此时千万别删软件,在终端中输入以下命令并输入开机密码解锁,执行完毕后,在“应用程序”中即可正常打开 PicGo。
sudo xattr -r -d com.apple.quarantine "/Applications/PicGo.app"
2. 云端准备:获取 R2 门禁卡
登录 Cloudflare 控制台,进入 R2 页面。
- 记住存储桶名称:在列表中找到你创建的 Bucket(例如:
my-image-bucket)。 - 生成 API 令牌:
- 点击概述页面最下方的 “管理 R2 API 令牌” -> “创建 API 令牌”。
- 权限必须选择 “管理员” 或 “编辑”(只读权限会导致上传失败)。
- 保存密钥(极其重要):
- 创建成功后,页面会显示
Access Key ID和Secret Access Key。 - 注意:
Secret Access Key只会显示这一次,必须立刻复制并保存下来。如果忘了,只能重新创建新令牌。两台不同电脑可以使用不同的令牌访问同一个桶。
- 创建成功后,页面会显示
3. 配置 PicGo 穿透与路径管理
打开 PicGo,进入 插件设置,搜索 s3 并安装 picgo-plugin-s3。重启后,进入 图床设置 -> Amazon S3,按照以下逻辑填入数据:
- 应用密钥 ID (AccessKeyID): 刚刚获取的 R2 Access Key。
- 应用密钥 (SecretAccessKey): 对应的 Secret Key。
- 存储空间名 (BucketName): R2 存储桶名称。
- 存储区域 (Region):
auto。 - 自定义节点 (Endpoint): 填写 CF 提供的 S3 终结点,格式为
https://<你的账户ID>.r2.cloudflarestorage.com。
核心细节:文件存放与链接生成逻辑。 在新版 S3 插件中,“自定义域名”选项已被整合进 URL 模板。为了兼顾文件整理与个人隐私,需要重点修改以下两项:
1. 自定义输出 URL 模板:
在此处填入 “https://你的自定义域名/{path}”。
{path} 是自动变量,PicGo 上传成功后会将其替换为图片的实际云端路径,拼接出访问链接。
2. 上传的图片路径: 清空默认按年月生成的路径,改为"blog/{md5}.{ext}",这样可以把所有的文件存储在一个目录里,并且可以通过md5哈希算法防止文件名重复。
blog/:强制把图片统一归档到云端的blog文件夹中,避免根目录杂乱。{md5}.{ext}:极其优雅的命名方式。它会在上传前计算图片的 MD5 哈希值来重命名。这样不仅彻底抹除了原文件名中的个人隐私,还能实现天然去重——同一张图片反复上传,MD5 值一样,云端只会保留一份,绝不产生冗余垃圾。- 界面底部的
ForcePathStyle和Bucket 前缀均保持关闭状态no即可
三、日常使用与云端维护说明
配置完成后,设为默认图床,随便拖拽一张截图进去。如果 Mac 右上角提示“上传成功”,且剪贴板自动获得了  格式的链接,说明打通成功。关于图片的删除逻辑(历史遗留问题):
- 在PicGO删除图片:直接在 PicGo 的“相册”中点击红色的垃圾桶,PicGo 会带着拥有管理员权限的 API 令牌,自动向 Cloudflare 发送指令,把云端的实体文件一并无缝删除。【实测之下不推荐这么做,好像cloudfare中的图片不会被删除】
- 在Cloudefare R2存储桶删除:在 PicGo 的“相册”中点击红色的垃圾桶后,建议直接登录 Cloudflare R2 的网页控制台手动勾选删除。不过鉴于 10GB 的容量对于纯文字图片来说深不见底,偶尔残留几张也无伤大雅。