183 字
1 分钟
Workers流式传输

记录一下自己部署在workers上从R2获取更新文件的服务,使用流式传输避免请求体过大的问题

需要在worker内添加对R2的binding,NAME需设定为STARTLIVE_BUCKET以直接从env内拿到文件对象

worker.js
export default {
async fetch(request, env) {
const url = new URL(request.url);
// 假设你的 R2 桶中有一个 /files/yourfile.zip
const key = url.pathname.substring(1); // 获取文件名
const file = await env.STARTLIVE_BUCKET.get(key);
if (file) {
const headers = new Headers();
// 设置文件名,让浏览器触发下载
headers.set('Content-Disposition', `attachment; filename="${key.split('/').pop()}"`);
// 设置文件类型
headers.set('Content-Type', 'application/octet-stream');
return new Response(file.body, {
headers,
// 确保大文件可以流式传输
// body: file.body, // 已经是流式了
// headers: headers
});
} else {
return new Response("File not found", { status: 404 });
}
},
};
Workers流式传输
https://blog.bydfk.com/posts/worker-transmit-js-source/
作者
Radeky
发布于
2025-12-21
许可协议
CC BY-NC-SA 4.0