跳到主要内容

使用cloudflare的R2创建图床


使用 Cloudflare R2 创建图床

创建存储桶

先准备一个已经开通 R2 的 Cloudflare 账号,然后进入 R2 -> 创建存储桶。

R2 存储桶默认是私有的。图床需要公开读取时,推荐给 Bucket 绑定自己控制的 Custom Domain;r2.dev 更适合临时测试,不建议作为正式博客图片域名。

进入创建的桶,点击设置,下滑点击连接到域,example.com为你在cloudflare上托管的域名,会自动添加记录

等待初始化成功就可以上传图片了并通过url访问了

上传图片后点进去就能看到url

安装 PicGo

PicGo 用于管理图片上传和复制链接。桌面版直接从官方仓库下载安装即可:

PicGo Releases

安装后打开插件设置,搜索并安装适合 S3 兼容存储的插件。Cloudflare R2 提供 S3 兼容 API,所以后续按 R2 的 Account ID、Access Key、Secret Access Key、Bucket 和自定义域名填写即可。

配置 PicGo

先在 R2 中创建 S3 API 凭据。权限尽量只给图床需要的 Bucket,不要把管理整个 Cloudflare 账户的 Global API Key 填给 PicGo;Access Key / Secret Access Key 只显示和使用在本机配置中,不要写进博客或 Git 仓库。

然后像这样设置,创建完成记得保存密钥

保存密钥后关闭

打开软件,+号添加配置

找到这个S3API

如下填写

PicGo 3 与 AI 自动上传

截至 2026 年 8 月,本机使用 PicGo 3.0.2,原来的 aws-s3 配置和
picgo-plugin-s3 插件可以继续使用。当前上传器在 PicGo 顶部显示为
Amazon S3 / cloudflare。

PicGo 3 除了图形界面,还提供仅监听本机的 HTTP 服务。只要 PicGo 正在运行,
默认地址为:

http://127.0.0.1:36677

先检查服务是否存活:

Invoke-RestMethod `
  -Uri 'http://127.0.0.1:36677/heartbeat' `
  -Method Post

正常情况下返回:

{"success":true,"result":"alive"}

上传指定图片

下面的 PowerShell 示例会让 PicGo 使用当前选中的 aws-s3 配置上传图片:

$body = @{
  list = @('E:\blog_picture\文章名称\图片.png')
} | ConvertTo-Json -Compress

$result = Invoke-RestMethod `
  -Uri 'http://127.0.0.1:36677/upload' `
  -Method Post `
  -ContentType 'application/json' `
  -Body $body

$result

上传成功后,PicGo 会返回类似下面的结果:

{
  "success": true,
  "result": [
    "https://images.example.com/images/2026/08/图片哈希.png"
  ]
}

也可以直接调用 Windows 版 PicGo:

& 'C:\Users\用户名\AppData\Local\Programs\PicGo\PicGo.exe' `
  upload 'E:\blog_picture\文章名称\图片.png'

HTTP API 更适合脚本或 AI 使用,因为它会返回结构化 JSON,不需要依赖剪贴板。

普通网页版 ChatGPT 不能直接访问本机磁盘和 127.0.0.1。只有获得本地文件、
终端或桌面工具权限的 ChatGPT/Codex 才能执行上述操作。

为本地上传接口增加鉴权

PicGo 服务虽然默认只监听 127.0.0.1,但仍建议在 PicGo 配置中设置
settings.server.secret。设置后,请求上传接口时需要携带 Bearer Token:

$headers = @{
  Authorization = "Bearer $env:PICGO_SERVER_SECRET"
}

$result = Invoke-RestMethod `
  -Uri 'http://127.0.0.1:36677/upload' `
  -Method Post `
  -Headers $headers `
  -ContentType 'application/json' `
  -Body $body

不要把 PicGo 配置文件、R2 Access Key、Secret Access Key 或本地服务密钥提交到
Git 仓库,也不要在日志、截图和文章中公开这些值。PicGo 本地服务的完整说明见
PicGo CLI Commands 和
PicGo Configuration。

图片更新的正确方式

本图床使用 {year}/{month}/{md5}.{extName} 形式的内容哈希路径。更新一张图片时,
不建议覆盖旧 URL,而应使用以下流程:

  1. 将修改后的图片保存在本地备份目录。
  2. 通过 PicGo 上传,得到一个新的哈希 URL。
  3. 替换 Markdown 文章中的旧图片链接。
  4. 本地生成博客并检查新图片。
  5. 发布博客,确认 GitHub Pages 和 Cloudflare Pages 都能正常显示。
  6. 确认回退不再需要后,再删除旧的 R2 对象。

使用新 URL 可以避开浏览器和 Cloudflare 缓存中的旧内容。

删除 R2 图片时的注意事项

PicGo 的 /upload 接口只负责上传,不提供通用的 R2 删除接口。删除可以在
Cloudflare Dashboard 中完成,也可以使用兼容 S3 API 的工具完成。

本配置的公开 URL 前缀包含 /images/,但它不是 R2 对象键的一部分。例如:

公开 URL:
https://images.example.com/images/2026/08/abcdef.png

R2 对象键:
2026/08/abcdef.png

自动删除前至少应同时校验:

  • Bucket 名称正确;
  • 对象键正确;
  • ETag 与预期图片哈希一致;
  • Content-Length 与本地备份大小一致。

删除后还应分别确认 S3 API 返回对象不存在,且公开 URL 返回 404。不要仅根据
文件名进行批量删除,也不要在新页面发布成功前删除旧图片。

给 AI 的最小操作原则

当 ChatGPT 或 Codex 帮助管理图床时,应遵守以下规则:

当前目录分工如下:

  • E:\blog 是原博客和文章内容源,日常新增、修改文章时先操作这里;
  • E:\blog-optimized-20260731 是优化、构建和测试副本,文章修改后再同步到这里验证;
  • 主题、依赖、脚本和构建优化只在优化副本中进行;
  • 不要在两个目录间复制 node_modules、public、db.json 或 .deploy_git。

AI 操作时还应遵守:

  1. 图片原文件先保存在本地备份目录。
  2. 上传前确认当前 PicGo 上传器为 aws-s3。
  3. 只接受 success: true 且域名正确的返回 URL。
  4. 上传后检查 HTTP 状态、Content-Type 和文件大小。
  5. 将图片链接先插入 E:\blog 中的原文章,再同步文章到优化副本测试。
  6. 不读取、打印或复制 PicGo 中的 R2 密钥。
  7. 没有明确授权时,不删除或覆盖任何远程对象。
  8. 更新图片使用新哈希 URL,文章发布成功后再清理旧对象。

文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
赏
评论

评论将在接近此处时加载,也可点击立即加载。

  目录