[代码]通过Cloudflare Workers实现webdav文件直链下载
本帖最后由 那年夏天52 于 2024-11-18 19:25 编辑有一个文件压缩包,我传到了一个webdav网盘,想供人下载,我不想用网盘网站提供的那个分享链接,想实现一个绑定自己域名的下载外链!
尽管有zpan、zfile、alist网盘挂载工具可以实现,但是我又不想额外增加服务器成本!而且这些大多都是能直接访问看到文件列表的!
于是我想到通过赛博大善人的workers实现!
实现的功能就是访问workers域名直接弹出下载框下载文件!
代码如下:
```
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = 'webdav地址/文件夹名/文件名'; // WebDAV 服务器的文件地址
const username = '账号'; // WebDAV 服务器的账号
const password = '密码'; // WebDAV 服务器的密码
// 使用 Base64 编码用户名和密码以进行基本身份验证
const basicAuth = 'Basic ' + btoa(`${username}:${password}`);
// 创建一个新的请求,带有正确的请求头以访问 WebDAV 服务器
const webdavRequest = new Request(url, {
method: 'GET',
headers: {
'Authorization': basicAuth // 添加身份验证头
}
});
try {
const response = await fetch(webdavRequest);
if (!response.ok) {
return new Response('从 WebDAV 服务器获取文件时出错', { status: response.status });
}
// 返回文件作为响应,并设置适当的头以支持文件下载
return new Response(response.body, {
headers: {
'Content-Disposition': 'attachment; filename="下载时保存的文件名"', // 下载时保存的文件名
'Content-Type': 'application/zip' // 根据文件类型修改 Content-Type,例如 zip 文件
}
});
} catch (error) {
return new Response('错误: ' + error.message, { status: 500 }); // 捕获并返回错误信息
}
}
``` seatop 发表于 2024-11-19 08:16
workers很好玩的样子,使用的是js吗
是的,Cloudflare Workers 使用的是 JavaScript(或更具体地说,是 TypeScript 或 JavaScript 的一个子集)。Cloudflare Workers 提供了一个运行时环境,允许开发者在 Cloudflare 的全球边缘网络中运行 JavaScript 代码,这意味着代码可以在距离用户更近的地方执行,从而实现快速和低延迟的网络应用。 zwjdujin 发表于 2024-11-20 08:30
单文件我成功了,那这岂不是一个二级域名下一个文件?我还以为是works地址展示webdav文件夹,然后可以自 ...
我这个原本的目的就是我有一个自己的软件提供给我的客户下载,而且我不想让别人公开的看到列表,如果你要展现出来列表,通过workers应该也可以做到,您可以进一步研究一下!
或者您如果愿意买一台服务器,可以试试alist等现成的工具来挂载! 原来是这样,学会了,很有用 给技术点赞,但是为了技术而技术? 意义呢 厉害学习到了 似水流年小小 发表于 2024-11-18 19:51
给技术点赞,但是为了技术而技术? 意义呢
并没有为了技术而技术的意思,这个的意义主要是实现一个比较直接的文件下载外链,没有多余广告也没有各种花里胡哨的页面渲染 谢谢大佬
原来是这样,学会了,很有用 感谢分享 原来是这样,学会了,很有用
厉害 学习到了