Cloudflare(以下简称CF)的R2存储桶的免费套餐包含:

项目免费额度说明
存储空间10 GB/月每月可免费存储 10 GB 数据
Class A 操作(写入类操作)一百万次/月包括写入、修改、列出对象、创建、上传、删除等操作
Class B 操作(读取类操作)一千万次/月包括读取、获取对象、下载、检查对象状态等操作
出站流量(Egress)免费从 R2 向外部互联网传输数据不收费
可用存储类别Standard Storage免费额度仅适用于标准存储类别
计费单位GB/月免费额度每月自动重置
超出部分按用量计费超过免费额度后按标准价收取费用

  对我这种极小体量的个人博客来说,10g的存储量绰绰有余,而且只要通过CF解析的网址,都会免费加上https的解析,方便又省钱,真不愧为赛博活佛。此处记录三个搭建方案,将免费额度更好地利用起来。
  

方案一:CF内的D1数据库+R2存储桶(最简单)

  这个方案来自博主“零度解说”。分别建立一个D1数据库,以及一个R2存储桶(首次开通需要绑定银行卡或paypal),然后将他博客里中的github克隆到自己的仓库,再导入CF里的Pages里面,输入代码、绑定各种相关数据后即可完成。具体参考他的博文内容,以及视频讲解(图床内容时间为2:48-8:50)。
  
  这个方案非常简单,按教程照做之后,就可以拥有自己的图床。但是有两个问题:其一,该操作是在网页端完成的,且只负责上传,获取图片的url仍需进入CF的R2存储桶中,上传与读取分开,不方便;其次,上传的接口有好几个,除了自己的R2接口,还有作者TG的接口。我个人觉得不纯净,所以就放弃了这个方式。
  

方案二:R2存储桶+picgo桌面端(最推荐)

  以R2存储桶为数据库,picgo来执行操作,这样可以在app上实现上传、读取、删除,以及图片格式的变换,很方便。

  1. 注册好CF账户后,进入“主页-建构-存储和数据库-R2对象存储-概述”,选择右上角蓝色标“创建存储桶”。名字随便取,例如“images”;位置可以选择“亚太地区”,“默认存储类型”选“标准”。这样,一个存储桶就建立好了;
      
  2. 在R2存储桶中,点击“设置-公共开发URL-开启”,然后按指示输入“allow”,即可开启。这样,就可以得到一个.r2.dev的域名,存储桶可以接入互联网,为此后连接亚马逊S3接口做好准备;
      
  3. 回到“概述”,右下角有一个API Tokens,点进去选择“创建User API令牌”,令牌名称可以和R2存储桶保持一致。权限选“对象与读取”,然后“仅用于特定存储桶”,选择刚才创建的“images”。剩余的设置保持默认,点击创建令牌。于是就出来好几个数值串,将名称和对应的值存储起来,保存好,因为只出现这一次!!!
      
  4. 下载安装picgo,github的仓库是https://github.com/Molunerfinn/PicGo,选择自己的对应系统的版本即可;
      
  5. 在picgo中选择“插件设置”,然后搜索栏输入“s3”,安装(我用的是S3-lls 1.0.2);
      
  6. 在picgo中,选择“图床设置-Amazon S3”,选择一个default开始设置

    图床配置名:建议和R2存储桶同名

    应用密钥ID:对应步骤3令牌中的“访问密钥ID”

    应用密钥:对应步骤3中的“机密访问密钥”

    桶:R2存储桶的名称

    文件路径:{fileName}.{extName} ——来自一位博主的推荐

    权限:public-read

    自定义节点:对应步骤3“为 S3 客户端使用管辖权地特定的终结点”

    自定义域名:对应步骤2中的.r2.dev域名

  7. 在Picgo中,将图片拉进上传区,然后图片就可以在相册中查看了,选择图片后,可以输出想要的格式,常用的Markdown,URL,HTML等格式都有,很方便;
      
  8. 此时再回到CF的R2存储桶中,图片都在里面了。
      
      至此,免费的图床就搭建好啦!
      

方案三:R2存储桶+picgo桌面端+webp代理(可选)

  这个方案是在方案二的基础上加入了webp的代理,可以在保证图片质量的基础上大幅缩减图片的体积,让图片加载速度变得更快。不过,由于每天的免费额度只有3000次浏览,这个方案的图片最好用于图片比较少的文章中。当然,付费的流量价格也不高,根据自己的网站规模、图片数量等选取套餐就好。
  

  1. 完成方案二的所有步骤,注意步骤1创建存储桶的时候,地区选择“北美洲西部”;
      
  2. 进入webp的官网注册账号,用github的账号比较好,可以直观地看到许多数据,包括已使用的浏览次数等;
      
  3. 选择右下角“Create Proxy”(创建代理):
      

    地区:选择美国Hillsboro,OR

    Proxies-name:随便填写,可以与R2存储桶一致

    Proxy Origin URL:填写R2存储桶.r2.dev的域名

    代理模式:建议使用Rapid模式,这样图片加载速度会更快

  4. 创建好后,就会生成一个后缀为.webp.li的代理地址;
      
  5. 打开Picgo,在“图床设置-Amazon S3”中打开此前设置好的图床,在“自定义域名”中,用.webp.li的代理地址替换掉此前的R2存储桶.r2.dev域名。
      
      设置完后,点开上传图片的url,就会看到经过.webp.li的域名,证明webp的代理成功了。但我用下来感觉方案二和三几乎没有什么差别。
      

  p.s. 每个账户可以创建一百万个存储桶,所以可以创建多个不同用途的独立存储桶,只要总容量不超过10G就行。具体容量的规定看这里:https://developers.cloudflare.com/r2/platform/limits/?utm_source=chatgpt.com
  

参考资料:

  1. 零度博客:利用 CF 的 Workers 创建无限的免费图床!爽歪歪
  2. 零度解说油管频道:Cloudflare 免费用到爽!Workers/Pages 搭建无限图床、个人导航站、博客等全搞定!
  3. Pseudoyu:从零开始搭建你的免费图床系统 (Cloudflare R2 + WebP Cloud + PicGo)
  4. CF官网:https://www.cloudflare.com/zh-cn/
  5. PicGo的Github仓库:https://github.com/Molunerfinn/PicGo
  6. webp官网:https://webp.se/