CloudflareR2快速开始使用(白嫖)指南

R2入门指南

Cloudflare R2存储允许开发人员存储大量非结构化数据,而无需支付与典型云存储服务相关的昂贵出口带宽费用。

购买R2

在创建第一个存储桶之前,您必须在Cloudflare仪表板中购买R2。(使用易贝卡就可以)

购买R2:

  1. 登录Cloudflare仪表板
  2. 帐户主页中,选择R2
  3. 选择购买R2计划
  4. 选择继续查看付款详情以查看您的付款。
  5. 选择返回 R2以前往 R2 面板。

R2 的配额限制

在公测期间,R2 有如下的配额限制:

  • 每个账户可新建1000个存储桶
  • 每个存储桶可存储无限个对象
  • 每个对象大小最大5TB
  • 单次最大上传大小5GB,可多次分段上传
  • 每秒1000次的 A 类操作
  • 每秒250次的 B 类操作

A 类操作包括ListBuckets、PutBucket、ListObjects、PutObject、CopyObject、CompleteMultipartUpload、CreateMultipartUpload、UploadPart、UploadPartCopy

B 类操作包括HeadBucket、HeadObject和GetObject

免费操作包括DeleteObject、DeleteBucket、DeleteMultipartUpload

R2 的收费价格

R2 存储的价格要比目前的存储服务都低,有一部分免费额度,免费额度用完以后才开始计费:

  • 存储费用:每个月10GB免费额度,超出后每个月每 GB 收取 $0.015 的存储费用
  • A 类操作费用:每个月一百万次免费额度,超出后每百万次收取 $4.50 的操作费用
  • B 类操作费用:每个月一千万次免费额度,超出后每百万次收取 $0.36 的操作费用

由上可见价格比现有的存储服务厂商低的多,AWS 的 S3 是不是瑟瑟发抖?

创建存储桶

点击创建-输入名称-提交就好了

image-20220728234636813

造个Workers访问你的桶

打开workers,创建一个workers服务

并填入下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
addEventListener("fetch", event => {
event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
const url = new URL(request.url)
const objectName = url.pathname.slice(1)

console.log(`${request.method} object ${objectName}: ${request.url}`)

if (request.method === 'GET' || request.method === 'HEAD') {
if (objectName === '') {
if (request.method == 'HEAD') {
return new Response(undefined, { status: 400 })
}

const options = {
prefix: url.searchParams.get('prefix') ?? undefined,
delimiter: url.searchParams.get('delimiter') ?? undefined,
cursor: url.searchParams.get('cursor') ?? undefined,
include: ['customMetadata', 'httpMetadata'],
}
console.log(JSON.stringify(options))

const listing = await R2.list(options)
return new Response(JSON.stringify(listing), {
headers: {
'content-type': 'application/json; charset=UTF-8',
}
})
}

if (request.method === 'GET') {
const range = parseRange(request.headers.get('range'))
const object = await R2.get(objectName, {
range,
onlyIf: request.headers,
})

if (object === null) {
return objectNotFound(objectName)
}

const headers = new Headers()
//object.writeHttpMetadata(headers)
headers.set('etag', object.httpEtag)
const status = object.body ? (range ? 206 : 200) : 304
return new Response(object.body, {
headers,
status
})
}

const object = await R2.head(objectName, {
onlyIf: request.headers,
})

if (object === null) {
return objectNotFound(objectName)
}

const headers = new Headers()
//object.writeHttpMetadata(headers)
headers.set('etag', object.httpEtag)
return new Response(null, {
headers,
})
}
if (request.method === 'PUT' || request.method == 'POST') {
const object = await R2.put(objectName, request.body, {
httpMetadata: request.headers,
})
return new Response(null, {
headers: {
'etag': object.httpEtag,
}
})
}
if (request.method === 'DELETE') {
await R2.delete(url.pathname.slice(1))
return new Response()
}

return new Response(`Unsupported method`, {
status: 400
})
}

function parseRange(encoded) {
if (encoded === null) {
return
}

const parts = encoded.split("bytes=")[1]?.split("-") ?? []
if (parts.length !== 2) {
throw new Error('Not supported to skip specifying the beginning/ending byte at this time')
}

return {
offset: Number(parts[0]),
length: Number(parts[1]) + 1 - Number(parts[0]),
}
}

function objectNotFound(objectName) {
return new Response(`<html><body>R2 object "<b>${objectName}</b>" not found</body></html>`, {
status: 404,
headers: {
'content-type': 'text/html; charset=UTF-8'
}
})
}

image-20220728234754964

在worker首页的设置-变量-R2 存储桶绑定,编辑变量,新建一个,左侧变量名称填入R2,右侧选择你的R2存储桶,保存

image-20220728234959075

2.默认情况下未指定路径,方式为get时会列出所有key,根据路径能下载文件
3.详细解析我将稍后贴出,之后会写在自己博客上,如果你看得懂那也可以自己看
4.这个脚本是能够进行A类操作,也就是可以修改/删除R2,如果只读的话请自行删除

如何加速?

使用第三方CFCDN平台接入你的域名

例如面板 | CloudFlare CDN合作接入管理平台-挖站否 – (wzfou.com)

在worker首页的触发器-自定义域-添加你的域名

image-20220728235535930

就好了

如何访问?

例如你上传了一个名为abc.jpg的文件

访问地址就为https://abc.com/abc.jpg

附录

workers.dev在我们伟大的祖国里被黑名单了,直连打不开属正常,建议使用特殊方法(绑定自己的域名加速,看上面的方法)


CloudflareR2快速开始使用(白嫖)指南
https://blog.quickso.cn/2022/07/28/CloudflareR2快速开始使用指南教程/
作者
木子欢儿
发布于
2022年7月28日
许可协议