跳过正文

图床哪家香?Cloudflare R2!

·4 分钟· loading
asm2apex
作者
asm2apex
目录

博文概览
#

博文概览

你写博客最浪费时间的事是什么?

不是写字,是“插图”:

  • 截个图
  • 找个地方放
  • 复制链接
  • 粘回 Markdown
  • 然后发现链接 404,再来一遍

所以我给自己整了个图床:Cloudflare R2 + 自定义域名 + VS Code 一键上传插入链接。目标很明确:复制粘贴就完事,别让我像在搬砖。

这篇文章只讲能落地的最短路径,不讲“未来也许要用的高级玩法”。你按着做完,会得到一个结果:

  • Cmd+V 粘贴图片 -> 自动上传到 R2 -> 自动插入 https://img.xxx.com/... 这种链接

0. 先讲清楚:R2 是什么,图床要什么
#

R2 就是对象存储(Object Storage):你把文件丢进去,拿一个 URL 访问。它兼容 S3 API,所以很多工具能直接用。

图床要的无非三点:

  • 稳定:链接别隔天就寄
  • 可控:域名在你手里,别被平台一刀切
  • 省心:上传别折腾

1. 创建 R2 Bucket:先有仓库再谈搬运
#

Cloudflare Dashboard -> R2 -> Create bucket。

Bucket 名字自己起,建议不要乱七八糟,比如:

  • blog-assets
  • img

命名别含大写和奇怪符号。你未来会感谢现在的你。

2. 让图片能被访问:Public Read
#

把 bucket 设为可公开读取(public read)。这个选项在 Cloudflare 的 UI 里会变位置,但本质就是:允许匿名 GET。

3. 绑定自定义域名:图床的灵魂
#

你已经配置了自定义域名,那我把关键点说透:

  • 你访问的最终 URL 要长这样:https://img.your-domain.com/path/to/file.png
  • 域名必须走 HTTPS(别跟浏览器斗气)

这样做的好处:

  • 链接看起来干净
  • 你换存储服务也能平滑迁移(域名不变,后端变)

4. API Key:别把“钥匙”贴到墙上
#

R2 的上传需要 Access Key / Secret Key。规则就一句话:

  • 密钥只放在本机,别进 Git,别写进文章,别截图。

在 Cloudflare R2 里创建 API token/密钥时,权限给最小:

  • 只给对应 bucket 的读写
  • 不要给全账户管理

你不是在练习“权限越大越安全”。

5. VS Code 一键上传:PicGo + S3 兼容配置
#

这块是你真正想要的:粘贴图片时自动上传,并插入 https 链接。

5.1 安装
#

  • 安装 PicGo 客户端(macOS 一个 App)
  • VS Code 安装扩展:PicGo

5.2 配置 PicGo(S3 兼容 -> R2)
#

R2 兼容 S3,所以你在 PicGo 里选 “Amazon S3 / S3 Compatible” 这一类存储,配置核心字段:

endpoint: https://<ACCOUNT_ID>.r2.cloudflarestorage.com
accessKeyId: <你的 R2 Access Key>
secretAccessKey: <你的 R2 Secret Key>
bucket: <你的 bucket 名>
region: auto
customDomain: https://img.your-domain.com

如果 PicGo 里有 forcePathStyle,就打开;如果没有,能上传就别瞎折腾。

上传路径(可选)我建议按“站点/文章”分层,否则以后你会在桶里迷路:

uploadPath: blog/2026/01/

你当然也可以更细,比如按文章 slug 分目录,但别过度设计:先把“能用”做出来。

5.3 使用方式
#

在 VS Code:

  • 截图进剪贴板
  • 在 Markdown 里执行 PicGo 的“从剪贴板上传/粘贴上传”命令

它会插入:

![](https://img.your-domain.com/blog/2026/01/xxx.png)

这就是你要的“能显示 + 能点击 + 能复制”。

6. Hugo 里怎么用:全部外链
#

你就用上面的 ![](https://...),不用把图片放进仓库,构建也更轻。

代价也很明确:

  • 图床挂了,你文章就只剩 alt 文本

7. 常见翻车点(别问我怎么知道的)
#

7.1 上传成功但访问 403
#

原因只有一个:公开读取没开,或者域名绑定没指到正确的资源。

7.2 图片能访问但不显示(Content-Type 不对)
#

有些上传工具会把图片当 application/octet-stream,浏览器还是能显示,但某些场景会怪。

解决方式:换工具/修正上传时的 MIME。别在这一步写“万能脚本”,你先把链路跑通再谈完美。

7.3 旧图怎么都刷不掉(缓存)
#

你用的是同一个 URL 覆盖上传,CDN 缓存会让你怀疑人生。

解决方式很朴素:

  • 文件名带 hash(最简单)
  • 或者每次上传用新文件名

别指望“刷新一下就好了”,这不是本地文件系统。

8. 我的结论:图床不是技术活,是流程活
#

R2 本身不神奇,神奇的是你把“插图流程”变成了:

截屏 -> 粘贴 -> 自动上传 -> 自动插入链接

你写作的中断次数越少,文章质量越高。别把时间浪费在搬运图片上,把时间花在内容上。