本帖最后由 那年夏天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 }); // 捕获并返回错误信息
}
}
|