跳到主要内容
AnyStorage
免费下载

R2 存储客户端

面向桌面团队的 Cloudflare R2 存储客户端

Cloudflare R2 的桌面 GUI 客户端:填入账户 endpoint 与 Object Read & Write 令牌,浏览 bucket、生成预签名链接,并把 R2 挂载成本地磁盘。

支持 macOS、Windows 与 Linux 的 Cloudflare R2 桌面客户端。endpoint、令牌、region 与 CORS 的关键细节均于 2026 年 9 月在 Cloudflare 官方文档核对。

Cloudflare R2 GUI 客户端,R2 存储客户端,Cloudflare R2 桌面客户端

R2 有 S3 API,但没有桌面客户端

Cloudflare R2 是一套讲 S3 API 的对象存储,改一个 endpoint,现有 SDK 就继续可用。让团队搬数据过去的理由写在定价页上,2026 年 9 月核对的结果是:标准存储每 GB-月 $0.015,而关于出流量,页面说得毫不含糊——"There are no charges for egress bandwidth for any storage class."(任何存储类别都不收出向带宽费用。)

取回免费会改变桶里放什么。发布二进制、视频母版、训练数据集、每晚的数据库导出,都不用再算一遍取回成本。然后有人要在普通应用里打开其中一个文件,工具链就到头了。

Cloudflare 自己为 R2 收录的集成文档,2026 年 9 月时只有 rclone、两个 Terraform provider 和 14 篇 S3 SDK 页面(aws CLI、boto3、aws-sdk-js-v3、aws4fetch、s3mini 等)。里面没有任何一个 GUI 客户端。 官方给的路子就三条:控制台、wrangler(文档明确写了单文件上传上限 315 MB)、加 --endpoint-url 的 AWS CLI。AnyStorage 补的正是中间这层:把 R2 的 bucket 当成文件树来用的桌面工作台。

连接 R2 需要的四项

R2 的连接就是「endpoint 固定的 S3 连接」。主机名格式写在 S3 API 文档里,按管辖区(jurisdiction)划分的变体写在 API 令牌页里。

sh

# 常规账户 endpoint
https://<ACCOUNT_ID>.r2.cloudflarestorage.com

# 带 jurisdiction 创建的 bucket 必须用对应 endpoint
https://<ACCOUNT_ID>.eu.r2.cloudflarestorage.com
https://<ACCOUNT_ID>.fedramp.r2.cloudflarestorage.com
https://<ACCOUNT_ID>.us.r2.cloudflarestorage.com

如果 bucket 是在 EU 或 FedRAMP 管辖区创建的,而客户端连的是普通账户 endpoint,那个 bucket 看起来就是不存在——这类「大概是密钥不对」的反馈,多数其实跟密钥无关。

令牌。 控制台路径是 R2 object storage → Account Details → Manage API Tokens,文档列出的权限档位是 Admin Read & Write、Admin Read only、Object Read & Write、Object Read only。桌面客户端要的是 Object Read & Write,定义是 "read, write, and list objects in specific buckets";同一页也写明对象级令牌可以限定 "to a set of buckets",不必覆盖整个账户。Secret Access Key 只显示一次。

region。 文档写的是 "the region for an R2 bucket is auto",并且 "an empty value and us-east-1 will alias to the auto region"。其他值都是猜的。

寻址方式。 R2 两种都接受。最早只有路径寻址,发布说明记录了 2022 年 5 月 16 日新增 "support for S3 virtual-hosted style paths, such as <BUCKET>.<ACCOUNT_ID>.r2.cloudflarestorage.com"。所以 path-style 开着也行、关着也行。这和自建的 MinIO 正好相反:后者在配置域名之前只认 path-style。

在 AnyStorage 里这是一个对话框的事:新增连接,选 Cloudflare R2,粘贴 endpoint 和密钥对。凭据加密保存在本机,不需要注册账号。

R2 与 S3 不完全相同的地方

Cloudflare 公开了 S3 API 兼容性清单,客户端必须照着来。2026 年 9 月核对,与客户端相关的部分是:

  • 没有 ACL。 x-amz-acl 以及整套 x-amz-grant-* 都未实现,权限来自令牌,而不是逐对象授权。
  • 对象标签未实现,生命周期功能标注为 "currently in progress"(实现中)。
  • 存储类别只有 STANDARD 与 STANDARD_IA。
  • 服务端加密支持 SSE-C,不支持 AWS KMS 的密钥头;校验和支持复合形式的 CRC-32、CRC-32C、SHA-1、SHA-256,不支持 FULL_OBJECT。

日常更常撞上的是尺寸限制,它直接决定一次传输成不成。

桌面客户端真正会撞上的 R2 上限(来自 Cloudflare 的 limits 与 multipart 文档,2026 年 9 月核对)
项目值
单对象最大尺寸5 TiB(精确为 4.995 TiB)
单次 PUT 最大尺寸5 GiB(精确为 4.995 GiB)
分片最小尺寸5 MiB(最后一片除外)
分片尺寸除最后一片外必须等大
单次上传最大分片数10,000
对象键长度1,024 字节
每账户 bucket 数1,000,000

把前两行连起来读:超过约 5 GiB 就只能走分片上传,因此只会整文件 PUT 的工具会在大视频上失败,而且几乎不告诉你为什么。

预签名链接与三个边界

R2 支持预签名 URL,文档写得很具体:AWS Signature Version 4,有效期 "1 second to 7 days (604,800 seconds)",支持 GET、HEAD、PUT、DELETE 四种方法。两个限制最容易踩:HTML 表单的 POST 分片上传 "is not currently supported";预签名 URL "cannot be used with custom domains",只对 S3 API 域名有效。

AnyStorage 在 Pro 上生成预签名的上传与下载链接——要把单个对象交给不该拿到令牌的人时,这是最快的做法。S3 那一侧的同一机制见预签名链接说明。

公开 bucket 与 r2.dev

R2 可以把 bucket 暴露在 Cloudflare 托管的 r2.dev 子域上,而文档对它的定位毫不掩饰:通过 r2.dev 的公开访问 "is rate-limited and should only be used for development purposes",这个 endpoint "is intended for non-production traffic"。想用 WAF 自定义规则、缓存、访问控制或 Bot Management,文档要求把 bucket 放到自定义域名后面。

所以 r2.dev 不是分发方案。一次性交付用预签名链接,正式分发用自定义域名。

当问题其实出在 CORS

桌面客户端不会发浏览器预检请求,这本身就是一种排查手段:如果 AnyStorage 能列目录、能下载,而网页端不行,那么凭据是对的,该怀疑的是 CORS 配置。

2026 年 9 月核对的 R2 CORS 文档定义了 AllowedOrigins、AllowedMethods、AllowedHeaders、ExposeHeaders 和 MaxAgeSeconds。来源必须 "must match exactly"——协议、主机、端口都要一致,http://localhost:3000 与 https://localhost:3000 不是同一个。自定义头必须显式声明:带 x-user-id 这类头的请求 "should specify these headers as AllowedHeaders",官方的排查步骤也是 "make sure the rule's AllowedHeaders includes the blocked request's headers"。文档从未说过 * 等于「任意头」,所以逐个写出来。另一个坑是 MaxAgeSeconds:浏览器会缓存预检结果,改好的策略在缓存过期前看起来仍然是坏的。具体报错见 R2 CORS 报错解析。

R2 工具对比

操作 Cloudflare R2 bucket 的几种方式(2026 年 9 月核对)
工具GUI挂载为磁盘Cloudflare R2 文档收录Linux价格
AnyStorage有,桌面应用有,本地 WebDAV,无需驱动未收录有,AppImage 与 .deb免费版 + 付费 Pro
rclone无,命令行有,需要 FUSE 或 WinFsp已收录有免费开源
Cyberduck有,桌面应用无未收录无免费开源
AWS CLI无,命令行无已收录(aws CLI 页)有免费
Cloudflare 控制台有,浏览器内无官方自带仅浏览器免费

表格背后的取舍:

  • rclone 是这里最强也最费事的一个。它是 Cloudflare 为 R2 收录的唯一第三方工具,rclone mount 能给出真正的磁盘行为,代价是装 FUSE 或 WinFsp,再决定 --vfs-cache-mode,很多程序才肯往挂载点写入。
  • Cyberduck 是带 R2 连接配置的好用免费浏览器,不能挂载,也没有 Linux 版。
  • AWS CLI 适合「能事先描述清楚的复制」,不适合「在三层前缀下找一个只记得一半名字的文件」。控制台是创建 bucket、令牌和自定义域名的正确地方,也是搬文件最慢的地方。
  • AnyStorage 处在浏览器与挂载工具之间;它没有出现在 Cloudflare 的文档里,那一行是故意如实写的。

把 R2 挂载成本地磁盘

有些程序只认路径。AnyStorage 用常规 S3 API 与 R2 通信,再把当前连上的所有存储通过运行在本机 http://127.0.0.1:3211 的 WebDAV 服务重新提供出来。没有 macFUSE、没有 WinFsp、没有内核模块、不需要管理员权限:挂载交给系统自带的 WebDAV 客户端,也就是 Finder 的「连接服务器」、资源管理器的「映射网络驱动器」,或 Nautilus / Dolphin 里的 dav://。完整步骤在这里。免费版只读,Pro 可读写。

平台与安装

0.2.25 于 2026 年 9 月 23 日发布,支持 macOS 11 及以上、Windows 10 及以上、Ubuntu 20.04 及以上。Mac 上用 brew install --cask kilerd/tap/anystorage。免费版支持两个存储连接。如果 R2 只是你多个存储中的一个,可以从 S3 GUI 客户端总览,或 Linux 与 macOS 的专页开始。

常见问题

R2 支持预签名 URL 吗?

支持。Cloudflare 文档记录了 SigV4 预签名 URL,覆盖 GET、HEAD、PUT、DELETE,有效期从 1 秒到 7 天(604,800 秒)。POST 表单上传不支持;预签名 URL 只能用于 S3 API endpoint,不能用于自定义域名。AnyStorage 在 Pro 上可以生成。

为什么我的 R2 CORS 配置不生效?

通常是三种情况之一:来源没有完全匹配(含协议与端口);某个自定义请求头没写进 AllowedHeaders;浏览器还在按 MaxAgeSeconds 缓存旧的预检结果。文档从未声明 * 覆盖任意请求头,所以要逐个列出。详见 R2 CORS 报错解析。

R2 的 endpoint 和 region 该填什么?

endpoint 是 https://<ACCOUNT_ID>.r2.cloudflarestorage.com,如果 bucket 带 jurisdiction,就用 eu、fedramp 或 us 变体。region 填 auto;文档说明空值和 us-east-1 同样会被映射为 auto。

R2 需要开 path-style 吗?

不需要。R2 从 2022 年 5 月起支持 virtual-hosted 形式,同时仍然接受路径寻址,两种设置都能用。真正必须开 path-style 的是自建的 MinIO。

不装 FUSE 能把 R2 挂成磁盘吗?

可以。AnyStorage 在 http://127.0.0.1:3211 上运行本地 WebDAV 服务,挂载由系统自带的 WebDAV 客户端完成,不涉及 macFUSE 或 WinFsp。免费版只读,Pro 可读写。