之前写过一个基于腾讯云 SCF 的 OneDrive 列表程序 FODI,现在腾讯云要收费了,每月至少 8 毛钱,虽然不多,但既然 Cloudflare 仍是免费的,不如移植一下,反正只是改改入口。
突然白屏
refresh_token
有效期 3 个月,如突然无法打开,请 重设后端代码。
迟到的自动续期
之前,FODI 每过 3 个月要重设后端代码,原因是 Cloudflare Worker 是 Serverless 环境,不支持持久化存储。刚编写 FODI 时,Cloudflare KV 还处于收费状态,如果使用第三方免费存储则担心可用性和延迟问题。考虑过使用 CI 定时更新环境变量但一直没有动工,想着整体重构后一并添加。但现在重构意愿不强了,Cloudflare KV 免费服务也已推出一段时间,于是添加几句代码,让它支持 Token 自动续期。
重设后端代码
首先,打开 部署助手,按照页面上方步骤重设 Worker 代码。
创建 KV 命名空间
保存好代码后,切换到顶部菜单栏的 KV
标签。在 命名空间名称
下方的输入框中输入 FODI_CACHE
,随后点击右边蓝色的 添加
按钮。
在 Worker 中绑定 KV
转到 FODI Worker 脚本的 设置
页面,点击页面中部 KV 命名空间绑定
项目右侧的 添加绑定
按钮。
在 变量名称
下方的输入框键入 FODI_CACHE
,KV 命名空间
下拉框也选择 FODI_CACHE
,最后点击 保存
。
添加续期计划任务
转到设置左边的 触发器
面板,点击页面右边蓝色的 添加 Cron 触发器
按钮。
切换到 添加 Cron 触发器
项目的 Cron
标签,在 Cron 下方输入框键入 0 0 1 * *
,最后点击右下方蓝色的 Add Trigger
按钮。
验证 Token 是否保存
现在打开你的 FODI 前端等待网页列出文件后,再次进入 KV
面板,点击页面中部 FODI_CACHE
右侧的 查看
。
当看到 token_data
时,表明代码工作正常,不出意外,以后都不再需要手动续期。
演示地址
注册 Cloudflare 并创建 Workers
打开 Cloudflare 注册页面,输入 邮箱
和 密码
后点击 Create Account
,进入下个页面后直接点击左上角的 CLOUDFLARE
图标进入控制面板主页,不要进行其他操作。
进入主页后,点击靠近右下角的 Workers
。
此时系统会建议你修改子域名,直接点击 Set up
,随后点击弹出对话框中的 Confirm
。
之后会进入套餐选择页面,页面往下拉,找到 Continue with free
,点击它。
完成上述步骤后,系统会发送确认邮件到你的注册邮箱,请自行登录邮箱,找到相关邮件,点击其中的确认链接,完成确认。
上传 FODI 后端
完成邮箱验证后,再次点击左上角的 CLOUDFLARE
图标进入控制面板主页,点击右下角的 Workers
。
现在点击页面中间你刚刚创建的函数,进入代码编辑界面,随后打开 FODI Deployment Helper,按照指引生成并复制代码,粘贴到下图的代码编辑器中。
填写完毕后,点击页面中下部的 Save and Deploy
。
部署 FODI 前端
前端部署方法和老文章相同,见 通过 Github Pages 部署前端 章节。
唯一不同的是 SCF 网关地址
要换成 Cloudflare 的,右击下图箭头,选择 复制链接地址
即可获得。
最后如果这个项目帮到了你,不妨到 Github 为我点颗星。
如有问题请在下方留言,文章转载请注明出处,详细交流请加下方群组!请大佬不要屏蔽文中广告,因为它将帮我分担服务器开支,如果能帮忙点击我将万分感谢。
你好, 请问这个支持 vercel 部署吗
前端可以直接在 vercel,后端必须在 cloudflare,但可以用 vercel 反代
原用index程序不知道为什么出错了,更换为此程序,但是原来的文件记录不太好改动,稍微改动了部分代码。功能是直接使用url/folder/file下载文件而不用加上?file=,但是目前缺点是如果文件夹包含.可能无法成功访问,但是对个人来说已经很满足了。在此感谢作者的作品,并希望这个微小改动能帮助到有相同需求的人。
以下是代码async function handleRequest(request) {
let queryString, querySplited, requestPath;
let abnormalWay = false;
if (request.url.includes("?")) {
queryString = decodeURIComponent(request.url.split("?")[1]);} else if(request.url.split("/").pop().includes(".")) {
let tmppath = request.url.split("://")[1] || "";
续
queryString = `file=/${tmppath}`;abnormalWay = true;
}
中间不变
if ((querySplited && querySplited[0] === "file") || abnormalWay) {
可以出一个可以在Pages上部署的吗 Workers 的域名在大陆地区用不了
抱歉,没时间维护了,worker 绑定域名可能可以用
我找到了一个不错的解决办法(比较浪费) 用 pages的函数转发到 workers
@(大拇指)
你好,那个 FODI Deployment Helper选择其他版本(我是微软个人onedrive应该就选其他版本吧),点击登陆后就跳转到无法访问,localhost已断开连接了,请问大佬要怎么解决
我没有看全使用说明,我的问题,如果看到这个评论,就删掉吧,有点丢人#(狂汗),不好意思
大佬,现在还能部署么,我世纪互联api挂了,重新用国际版od,生成配置,粘贴到cfworks,但是打开是cf的cdn错误页面,挂科学上网访问的@(乖)
可以
AADSTS9002313: Invalid request. Request is malformed or invalid.
获取代码提示这个,仓库的代码放进去部署提示错误。。
创建weorker后,worker编辑不了啊,不知道咋回事#(期待)
为什么现在 FODI Deployment Helper 点击获取代码后就白屏了呢?
挂下 t
replayURL这里到底应该填啥呢
redirectUri 24行报错了
现在是不是不好使了, 我看本文链接 你的免费网盘 也一样打不开了!@(乖)
大佬, 我用 FODI Deployment Helper 登录后点击生成代码后网页变为空白, 请问如何解决
浏览器: 版本 101.0.4951.41(正式版本) (64 位)
挂t子就行了
Hello Logi. first of thank for beautiful site. getting Error 1101 while deploy on cloudflare
please help
不會寫中文
Thank you for your love but I am too busy to help you. You can try to translate the webpage to your native language.
已经成功安装,膜拜大佬!
大佬想问一下Fodi怎么设置链接能直接指向某个文件夹下的某个文件
请问大佬 Cloudflare网关地址如何查看
最后一张图箭头指的就是
想问一下大佬为啥部署好了之后显示的还是您的demo呢...
根目录底部显示
console.log('FODI DEMO');
worker地址没换对吧
我现在准备重设后端来实现续期,使用部署助手重新获取的代码粘贴进wokers预览会报错,控制台报错:
```
worker.js:177 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'length')
at fetchFiles (worker.js:177)
at async handleRequest (worker.js:58)
fetchFiles @ worker.js:177
Promise.then (async)
(anonymous) @ worker.js:16
Uncaught (in response) TypeError: Cannot read properties of undefined (reading 'length')
```
请问这个如何解决呢?
抱歉打扰~我选错了公开文件夹@(小乖),感谢大佬,体验很流畅。#(赞一个)
为啥我的到了FODI Deployment Helper登录那块浏览器提示localhost 已拒绝连接,这是怎么回事?
感谢,折腾了一会儿。成功了。@(哈哈)