对象储存介绍
对象存储(Object Storage)是一种用来保存海量文件的现代化数据存储方式,常用于图片、视频、音频、文档、备份、静态资源等“不需要频繁修改”的数据。
它是云时代最常见的存储方式之一,比如:
- Cloudflare R2
- 阿里云 OSS
- 腾讯云 COS
- 亚马逊 S3
- 七牛云 Kodo
Cloudflare R2介绍
Cloudflare R2 是一款兼容 S3 API 的对象存储服务,最大特点是 无出口流量费,非常适合存放图片、视频、静态资源、文件下载等。只要你绑了卡就能使用,而且量大管饱,反观阿里oss只能试用3个月而且量小不管饱😭。
本文将从 注册账号 → 创建 Bucket → 获取 Key →创建桶 来一步步实现
步骤如下
1. 访问 Cloudflare 官网
访问官网注册一个账号
2. 注册完成后点击右侧对象存储


3.绑定支付方式(中国大陆用户:通过 PayPal 完成)
Cloudflare 的银行卡绑定只有这四种 ,国内的银联不能绑,但它支持PayPal来绑定。
所以大陆用户推荐路径:国内银行卡 → PayPal HK → Cloudflare Billing → 启用 R2。

所以我们通过Paypal来绑定,并且要使用的是 PayPal 香港站(https://www.paypal.com/hk),注册并绑定你的银行卡。
完成后再在这个页面点击这个完成绑定。
注:PayPal国内网站个人用户是无法绑定卡的。
因此,国内用户要成功绑定 Cloudflare 的可行方法就是:用 PayPal 香港站注册账号 → 用它绑定国内银行卡 → 再绑定 Cloudflare。
4、启用 Cloudflare R2 服务
完成绑定后就能免费使用啦!个人使用完全用不完!
能创建对象存储桶了,点击右上角蓝色按钮创建桶

给桶取个名称就能使用了

5.其他设置
r2桶的设置很多,例如自定义域 ,需要你的域名在Cloudflare里,否则只能使用公共开发 URL来访问

如果你想在Java或者其他语言访问 R2,都必须先创建 API Token(API 令牌)。
API Token 就是一串 授权密钥,允许你的程序以安全的方式访问 Cloudflare 的服务,例如:访问 R2 的对象,上传文件,删除文件,管理 Bucket等等
简单来说:
API Token = 程序访问 Cloudflare 的密码
和账号密码不一样,它是“可控权限、可控范围、可随时撤销”的专用密钥。
设置实在是太多了所以我请我们的gpt大人给我们讲解部分,其他的就留给你们自己探索吧!
以下由gpt生成
. Bucket 的设置与管理(R2 存储桶配置详解)
创建完一个 Bucket(存储桶)之后,R2 还提供许多实用的配置,让你可以控制权限、访问、生命周期、跨域、绑定域名等功能。
这部分的内容非常关键,特别是你要把 R2 用作:
- 图床
- 静态资源托管
- 网站图片存储
- 后端服务文件上传
- 用户上传系统
下面是所有你必须知道的 bucket 配置。
5.1. Bucket 权限设置(Public / Private)
R2 的桶权限只有两种:
Public(公开)
任何人都能访问文件,适用于:
- 图床
- 网站静态资源
- 前端直接访问的图片 / 视频
开启 Public 后 URL 形式:
https://<account-id>.r2.cloudflarestorage.com/<bucket>/<key>Private(私有)
文件无法直接访问,必须使用:
- 临时签名(Pre-signed URL)
- Worker 代理访问
- 后端中转访问
适用于:
- 用户文件
- 付费资源
- 后端业务的数据
在 R2 的界面可以直接切换权限,非常简单。
5.2. CORS 设置(跨域资源共享)
如果你要从浏览器读取 R2 的文件、上传文件、调用 API,就必须配置 CORS。
推荐最通用的配置:
允许跨域 GET/PUT 的基本配置:
-
Allowed Methods:
GET, PUT, HEAD, POST, DELETE -
Allowed Origins:
*或你的域名:
https://yourdomain.com -
Allowed Headers:
* -
Max Age:
86400
这个配置适用于 前端直传、图床、博客资源、静态站点。
5.3. 自定义域名绑定(强烈推荐)
默认域名:
https://<account-id>.r2.cloudflarestorage.com/不方便记,也不利于 SEO,因此你可以通过 Cloudflare Worker 将你的域名映射到 R2:
例如:
https://img.xxx.com/logo.png绑定步骤:
- 创建 Worker 并关联 R2 Bucket
- 加 Route,将 Worker 绑定到你的域名
- 设置缓存(可选)
这也是使用 R2 最专业的做法。
5.4. 生命周期规则(LifeCycle Rule)
类似于 OSS 的生命周期,有以下用途:
- 自动删除过期文件(比如临时文件 7 天后清理)
- 控制存储成本
- 清理生成的缓存文件
- 删除上传失败的对象
示例规则:
删除 30 天前上传的所有 .tmp 文件你可以通过:
R2 → Lifecycle → Create Rule来创建。
5.5. 存储桶加密(默认开启)
R2 自动对所有对象进行服务器端加密(Server-Side Encryption)。
你不需要额外设置,但可以在:
Security → Object Encryption查看加密方式(Cloudflare 托管密钥)。
5.6. 防止对象覆盖(Object Lock)
启用后:
- 相同的 key 无法被覆盖
- 必须先删除才能上传同名文件
- 适用于日志、备份、不允许覆盖的业务
很多云厂商收费,R2 免费。
5.7.. Workers 集成(R2 的最强能力)
你可以让 Worker 和 R2 结合来做:
- 私有桶访问控制
- 生成临时访问链接
- 对文件进行裁剪 / 压缩 / 处理
- 防盗链
- 下载限速
- 累计下载次数等业务逻辑
示例 Worker:
export default { async fetch(request, env) { const object = await env.MY_BUCKET.get("logo.png"); return new Response(object.body, { headers: { "Content-Type": object.httpMetadata?.contentType } }); }};这能让 R2 变成“带业务逻辑的对象存储”。
5.8. 设置文件的 HTTP Metadata(非常重要)
很多文件需要正确的 Content-Type,否则访问会出问题。
常用类型:
| 文件 | Content-Type |
|---|---|
| .jpg / .jpeg | image/jpeg |
| .png | image/png |
| .js | text/javascript |
| .css | text/css |
| .json | application/json |
| .mp4 | video/mp4 |
| application/pdf |
在上传时(Java SDK)可以设置:
PutObjectRequest put = PutObjectRequest.builder() .bucket("my-bucket") .key("logo.png") .contentType("image/png") .build();否则 Worker 返回时会是 application/octet-stream。
5.9. 对象版本管理(Versioning)
开启后:
- 覆盖同名对象时会自动生成版本号
- 可以回滚到旧版本
- 类似 Git 的文件管理方式
适合敏感文件、文档、历史备份。
6.Java Spring Boot 最简单使用 Cloudflare R2 - 文字讲解
Cloudflare R2 是一个 兼容 AWS S3 协议的对象存储。
对 Java 来说,它的好处就是:
只要能连 S3,就能连 R2
不需要任何 Cloudflare 专用 SDK。
所以,在 Spring Boot 里操作 R2,其实就是:
用 AWS S3 SDK + 改 endpoint。
6.1. 配置 R2 访问密钥(application.yml)
R2 会给你:
- Account ID
- Access Key
- Secret Key
- Bucket 名称
把这些写进 Spring Boot 的 application.yml:
cloudflare: r2: account-id: xxxxxxxxxxxxxxxxxxxxxxxx access-key: your_access_key_here secret-key: your_secret_key_here bucket-name: my-bucketSpring Boot 会自动把它们注入到配置类里。
6.2. 引入 AWS S3 依赖
因为 R2 采用 S3 协议,所以 Java 直接使用 AWS 官方的 S3 SDK:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.25.20</version></dependency>这个依赖提供:
- 上传文件
- 下载文件
- 删除文件
- 生成访问 URL
全部通用,不需要额外库。
6.3. 创建一个 R2Client(核心)
连接 R2 的关键就是:
把 AWS 的 S3 endpoint,换成 Cloudflare 的 R2 endpoint。
格式是:
https://<account-id>.r2.cloudflarestorage.com所以我们写一个配置类:
@Beanpublic S3Client r2Client() { return S3Client.builder() .region(Region.US_EAST_1) // 固定 .endpointOverride(URI.create("https://" + accountId + ".r2.cloudflarestorage.com")) .credentialsProvider(StaticCredentialsProvider.create(creds)) .build();}这样,S3Client 就不再访问 AWS,而是访问 Cloudflare R2。
6.4. 上传文件的实现逻辑(最简单版本)
上传文件其实就三步:
- 前端上传文件 → Spring 接收 MultipartFile
- 把文件流交给 r2Client
- 指定 bucket 和 key 即可上传
public String upload(String key, InputStream inputStream) { r2Client.putObject( PutObjectRequest.builder() .bucket(bucketName) .key(key) .build(), RequestBody.fromInputStream(inputStream, inputStream.available()) ); return key;}R2 就会自动保存这个对象。
6.5. Controller 接口(让用户能上传)
为了让前端能上传文件,我们写了一个简单的接口:
@PostMapping("/upload")public String upload(@RequestParam("file") MultipartFile file)这个接口做的事情:
- 接收 file(前端上传的文件)
- 生成一个 key(也就是对象在 R2 的路径)
- 调用 service 上传
- 返回 key 给前端
这就完成了整个文件上传流程。
最终效果
当你启动项目并访问:
POST http://localhost:8080/r2/upload上传一个图片,例如 hello.png,R2 上会出现:
uploads/hello.png这就是一个最简单、可运行、最容易理解的 Java Spring Boot × Cloudflare R2 上传文件 示例。
部分信息可能已经过时





