利用Cloudflare Workers托管你的静态资源

利用Cloudflare WorkersWorkers KV 可以快速、安全且易于管理地托管静态资源。不同于将它们放在Github仓库然后通过raw link或是CDN,这种方式不会有一长串乱七八糟的链接,且可以使用你自己的域名。例如现在可以从https://s.a33.su/artiga033_0C79B2C5863375CC.asc获取我的PGP公钥。

Workers KV提供1GB存储(白嫖之王也可以把数据硬编码到worker代码里?),对于个人开发者足够了。

创建Workers KV

你需要创建一个Workers KV,本文以名为命名空间为static为例,然后为它添加Key-Value,建议使用文件名作为Key。

将 KV 绑定到 Worker

创建一个新的 Worker(以static为例),转到设置选项卡,添加KV绑定,这会要求你输入一个全局变量名,本文以STATIC_FILE为例。

让 Worker 返回内容

在上一步定义的全局变量名可以直接在worker代码中调用,它有一个get方法来获得对应的Value:const value= await STATIC_FILE.get(name);
先写个function来生成Response,注意为它添加CORS标头方便跨站引用:

1
2
3
4
5
6
7
8
9
10
11
12
async function getStaticFile(name){
let resp=new Response("Value not found", {status: 404})
const value = await STATIC_FILE.get(name)
if(value != null)
{
resp=new Response(value)
}
//添加CORS标头
resp.headers.set("Access-Control-Allow-Origin","*")
resp.headers.set("Access-Control-Max-Age","86400")
return resp
}

现在 只需要获取URL请求中的Path 获取内容并返回:

1
2
3
4
5
6
addEventListener('fetch', event => {
const urlObj = new URL(event.request.url)
//pathname第一个字符是`/`,不需要包含它
const path = urlObj.pathname.substr(1)
event.respondWith(getStaticFile(path))
})

一个最简单的静态文件托管就完成了,现在你只需要添加对应的Key-Value,就可以在任意场景从Worker引用这些内容!

Permalink: http://blog.artiga.top/2021/host-static-file-on-cfworkers/

本文采用CC BY-NC-SA 4.0许可

Comments