通过cloudflare的R2存储桶和worker来做文件托管下载

  • A+
所属分类:Web开发

建立一个 R2 桶

打开 cloudflare 的控制面板的 R2 并且建立一个桶

新建一个 worker

代码如下,我只开放了 GET 方法,当然官方文档有详细的介绍
注意第4行加了一个 decodeURI 不然中文文件名会找不到

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',
},
});
}
},
};

绑定 R2 到 worker 上

设置-变量中绑定R2存储桶,注意环境变量名要和脚本的变量名一致

绑定自定义域名

现在已经可以直接通过 worker 的 url 进行下载了,但是也可以绑定一个自定义的域名

  1. 在 cloudflare 上关联域名
  2. 在域名的 dns 解析设置一个子域名,目标随便设置,但是要打开代理模式
  3. 在域名的 Workers的设置-触发器中添加自定义域, url 为 xxx.domain.com/*, worker 选择刚刚新建的worker

然后就大功告成,可以测试一下,上传个文件test.zip到 R2 上,然后浏览器打开 https://xxx.domain.com/test.zip 应该就可以下载了

下载服务恢复

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

Captcha Code