那年夏天52 发表于 2024-11-18 19:11

[代码]通过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 }); // 捕获并返回错误信息
}
}

```

wudalang123 发表于 2024-11-19 21:19

seatop 发表于 2024-11-19 08:16
workers很好玩的样子,使用的是js吗

是的,Cloudflare Workers 使用的是 JavaScript(或更具体地说,是 TypeScript 或 JavaScript 的一个子集)。Cloudflare Workers 提供了一个运行时环境,允许开发者在 Cloudflare 的全球边缘网络中运行 JavaScript 代码,这意味着代码可以在距离用户更近的地方执行,从而实现快速和低延迟的网络应用。

那年夏天52 发表于 2024-11-20 13:32

zwjdujin 发表于 2024-11-20 08:30
单文件我成功了,那这岂不是一个二级域名下一个文件?我还以为是works地址展示webdav文件夹,然后可以自 ...

我这个原本的目的就是我有一个自己的软件提供给我的客户下载,而且我不想让别人公开的看到列表,如果你要展现出来列表,通过workers应该也可以做到,您可以进一步研究一下!

或者您如果愿意买一台服务器,可以试试alist等现成的工具来挂载!

jjsq 发表于 2024-11-18 19:49

原来是这样,学会了,很有用

似水流年小小 发表于 2024-11-18 19:51

给技术点赞,但是为了技术而技术? 意义呢

luoyang123 发表于 2024-11-18 19:59

厉害学习到了

那年夏天52 发表于 2024-11-18 20:08

似水流年小小 发表于 2024-11-18 19:51
给技术点赞,但是为了技术而技术? 意义呢

并没有为了技术而技术的意思,这个的意义主要是实现一个比较直接的文件下载外链,没有多余广告也没有各种花里胡哨的页面渲染

leochang123 发表于 2024-11-18 20:10

谢谢大佬

moch 发表于 2024-11-18 21:14


原来是这样,学会了,很有用

sl3222112 发表于 2024-11-18 21:37

感谢分享

jinjin8644 发表于 2024-11-18 22:10

原来是这样,学会了,很有用

naore 发表于 2024-11-18 22:51


厉害  学习到了
页: [1] 2 3 4
查看完整版本: [代码]通过Cloudflare Workers实现webdav文件直链下载