R2是Cloudflare新(其实也不算很新,一年了)推出的分布式对象储存服务,与Workers结合可以用于托管静态文件并且不需要服务器,这里记录一下方法。
首先在R2里建一个bucket,起个你能分清楚的名字,这里以file1为例,如果是首次使用会提示开通R2 plan,按提示开通即可,费用是$0。R2是有免费额度的,包括10G的存储空间,每月10万次的A类操作和100万次的B类操作,所以只适合托管小文件,具体费用见官网。
然后来到Workers,新建一个应用(Create Application),现在的创建方式改了,得先部署一个hello world。点击Create Worker,也起个名字(非必须,保持默认也行),比如file,然后Deploy,之后回到这个Workers实例,点Quick edit,把worker.js替换成以下代码(复制粘贴即可,没有变量需要修改):
export default {
async fetch(request, env) {
const url = new URL(request.url);
const key = decodeURI(url.pathname.slice(1));
console.log(key)
switch (request.method) {
case 'GET':
const object = await env.R2.get(key);
if (!object || !object.body) {
return new Response('Object Not Found', { status: 404 });
}
const headers = new Headers();
object.writeHttpMetadata(headers);
headers.set('etag', object.httpEtag);
return new Response(object.body, {
headers,
});
default:
return new Response('Method Not Allowed', {
status: 405,
headers: {
Allow: 'GET',
},
});
}
},
};
因为我只需要下载功能,所以只开放了get,get属于B类操作,免费额度较高,更多功能可以参考官方文档。
然后绑定R2存储桶。回到Worker实例,选择Settings-Variables,在下面找到R2 Bucket Bindings,Add binding,variable name写R2,R2 bucket选择刚才创建的(就是前面的file1),点击Save and deploy。
之后在R2实例页面可以上传文件,比如上传一个test.txt,就可以通过Workers分配的域名访问了,即https://file.xxx.workers.dev/text.txt。
接下来可以绑定自己的域名(非必须),比如file.example.com。首先域名需要在Cloudflare托管(未托管的不确定,我没试过),然后来到Workers实例首页,选择Triggers,在Custom Domains下选择Add Custom Domains,输入域名,点击Add Custom Domains,等待几秒初始化,Cloudflare会为你自动配置好DNS,类型是Worker,如果这个域名之前有A类解析,删掉即可。之后就可以通过https://file.example.com/text.txt下载到文件了。
参考资料:
https://developers.cloudflare.com/r2/api/workers/workers-api-usage
https://blog.yswtrue.com/yong-cloudflare-de-r2-he-worker-lai-zuo-wen-jian-tuo-guan/
文章评论