FODI,Fast OneDrive Index 的缩写,意为 OneDrive 快速列表,是我自用的一版 OneDrive 列表程序。相较于其他程序,此版列表速度极快,且无需服务器,部署极为简单,当然,除此之外都是缺点。
演示地址
SCF 简介
腾讯云云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码,是实时文件处理和数据处理等场景下理想的计算平台。您只需使用 SCF 平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。
无服务器(Serverless)不是表示没有服务器,而表示当您在使用 Serverless 时,您无需关心底层资源,也无需登录服务器和优化服务器,只需关注最核心的代码片段,即可跳过复杂的、繁琐的基本工作。核心的代码片段完全由事件或者请求触发,平台根据请求自动平行调整服务资源。Serverless 拥有近乎无限的扩容能力,空闲时,不运行任何资源。代码运行无状态,可以轻易实现快速迭代、极速部署。
腾讯云 SCF 目前仍在 公测 阶段,所有用户可免费使用,结束日期待定。公测结束后,每月仍可享受足量的 免费资源使用量和免费调用次数,但收取 外网出流量
费用。
资源类型 | 每月免费额度 |
---|---|
资源使用量 | 40 万 GBs |
调用次数 | 100 万次 |
所谓外网出流量,即程序通过 SCF 访问外部网络的流量,对于本程序即请求微软 API 的流量,每次调用从几 B 到几 KB 不等;文件上传下载直接与微软交互,不经过 SCF。
下图(老图可能与描述不符)是我一天的使用量,大概调用了 10000 次,如果是 30 天就是 30 万次,还不到免费额度的 1/3。资源使用量 1000 GBs,30 天就是 3 万 GBs,远低于 40 万 GBs。外网出流量 0.05G ,一个月大概是 1.5 G,按照 正式收费标准 0.8 元/G,每月要支付 1.2 元的出流量费用,完全可以接受(目前不会收取)。
获取 refresh_token
进入 该网址(世纪互联版点我),点击其中的 Get a refresh_token
,在打开的微软账号登录页面中,填写你的 OneDrive 账号和密码
,完成登录。
T]W\_6)TC%RBYPYG8UV.png" title="5}RT]W
\_6)TC%RBYPYG8UV.png">
稍等片刻页面将返回 refresh_token
,复制它备用。
填写 refresh_token
下载并解压 FODI 源码,随后进入文件夹,用记事本打开 back-end-py/main/api/fodi.py
,将上一步得到的 refresh_token
粘贴进,下图所示的 ONEDRIVE_REFRESH_TOKEN
对应的双引号之间。
如需设置网盘展示的根目录,则填写第 10 行的 EXPOSE_PATH
变量,如 /媒体/电影
,全盘展示请留空。填写完毕后注意 保存
。
创建函数服务
以浏览器 隐身模式
登录 腾讯云 SCF 控制台(在此之前要完成腾讯云 实名认证),点击左侧菜单栏的 函数服务
,接着点击顶栏的地区选择下拉框,选择 香港或新加坡
,因为国外访问 OneDrive 较快。接着点击蓝色的 新建
按钮,创建函数。
随后在新建函数页面填写 函数名称
,名字随意;运行环境
选择 Python3.6
;创建方式
选择 模板函数
;选择 helloworld
模板,最后点击最下方的 下一步
。进入 ② 函数配置
页面后不做任何修改,直接点击 完成
。(下面这张是之前的老图,与描述不符,不要照搬)
VWO~RYU4QSIHMEE_{PG.png" title="GXVWO~RYU4QSIHM
EE_{PG.png">
上传函数代码
点击 SCF 函数代码
面板,将 提交方法下拉框
的值改为 本地上传文件夹
。点击 上传
,选择 解压文件夹内的 back-end-py
,待上传完毕后点击 保存
。注意,上传的是 back-end-py
文件夹,不是整个项目。
添加触发方式
进入函数服务的 触发方式
面板,点击 添加触发方式
。选择触发方式下拉框中的 API网关触发器
,勾选下方的 启用集成响应
,点击 保存
。
稍等片刻,下方会出现一个 访问路径
,点击打开它。
片刻,你将看到如下 JSON
数据(部分数据被省略),否则必须重新上传。
{
"code": -1,
"error": "path error.",
"examples": [
".../ciba/",
".../proxy/",
".../dnspod/",
".../wechat-step/",
".../lanzous/",
".../cloudmusic/",
".../aes/",
".../qr/",
".../fodi/"
]
}
通过 Github Pages 部署前端
前端仅是一个 HTML 文件,可放到任意静态服务器,此处通过 Github Pages 部署,部署完成后可通过 username.github.io
打开你的网盘。
注册并登录 Github,随后打开 该仓库,点击靠近右上角的 Fork
。稍等片刻,打开页面中部的 index.html
。
点击靠近 右上角
的 铅笔
按钮,编辑该文件。
将你的 函数 API 网关访问路径
填写到 index.html
的 SCF_GATEWAY
变量对应的引号中。SITE_NAME
变量是 站点名称
,可以随意修改。
填写完毕后点击靠近页面最下方的 Commit changes
。
点击靠近页面右上角的 Settings
,将 Repository name
改成 你的 Github 用户名.github.io
,随后点击 Rename
。
下拉该页面,找到 Github Pages
,将 Source
下拉框的值改成 master branch
,如果没有则无需修改。
现在,就可以通过 你的 Github 用户名.github.io
访问网盘了。
加密文件夹
在某个文件夹下添加 .password
文件,里面写入密码,即可加密该文件夹。注意文件必须以 UTF8NoBOM
编码,且密码前后不能有空格或空行,Windows 下可通过以下方式生成:
在待加密文件夹下按住 Shift
键的同时,鼠标右击文件夹空白处,选择 在此处打开 Powershell 窗口(S)
,接着执行以下命令,其中 1234
便是密码。
'1234' | Out-File -FilePath .password -Encoding ascii -NoNewline
最后,如果你觉得这个项目还行,请到 Github 为我加颗星。
如有问题请在下方留言,文章转载请注明出处,详细交流请加下方群组!请大佬不要屏蔽文中广告,因为它将帮我分担服务器开支,如果能帮忙点击我将万分感谢。
Github 仓库的index文件编辑不了
登录自己账号编辑你的,不是我的
加密文件夹好像不用那么麻烦,直接新建个txt文件,把密码放在文件里面,在重命名文件(包括后缀)改成.password,我就这样使用的
大佬,照你的方法部署好后,打开前端是空白,可以帮我看看是怎么回事吗
https://krau.top/onedrive/
@(委屈)
前端 HTML 里填错了,照着文章图片填
好吧,我再检查检查orz
为什么不把前端放在cloudflare里面?这样速度应该会比github快,只需加几行代码,就能将前端部署在cloudflare workers,我还做了个教程,教程地址:https://blog.csdn.net/qq_38243612/article/details/105352680,如果有侵权的内容,请联系我删除。希望作者大佬能出个只需部署在workers就能显示多个网盘的版本。另一个大佬的OneManager-php项目支持了多网盘,地址:https://github.com/qkqpttgf/OneManager-php,就是不像FODI支持cloudflare
大佬,用你的方法成功部署了onedrive列表,感谢!请问下这个方法能够部署google drive吗?要是能就太好了,onedrive资源共享/转存实在太不方便了。@(哈哈)
感谢支持,google drive 可以用 donwa 大佬的项目呢https://github.com/donwa/goindex
多谢!Goindex我用过,可惜在国内访问有点慢,不如你这个快。
你好!
请问用在腾讯云SCF的这套代码,可以直接运行于AWS Lambda吗?
感觉Serverless是不是只要运行环境相同就可以了呢@(太开心)
虽然都是 Serverless,每家的入口,API 都不同,不能直接运行
大佬,
Access to XMLHttpRequest at 'https://od-api.weifeng.workers.dev/' from origin 'xxx' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
前后端 http/https 要一致,不可混用
都是https,不知道为什么出这个问题...
那就是 cf 配置填错了
对,现在好了,谢谢大佬
我登录的时候,显示【需要管理员批准】,是账号的问题吗?我的教育5T
那应该就是了
有服务器端的吗?
没有呢,服务器可以用 oneindex 等
我以前忘了什么时候使用过腾讯云,已经付过0.01。现在卡在“添加触发方式”这个步骤,提示“操作未授权 ([TencentCloudSDKError] Code=InternalError.GetRoleError, Message=[QC_STS] role not exist, RequestId=d438ee66-8b4f-4429-9b5e-d29f2f36ffbd)”怎么解决呢,谢谢
刚进入scf会弹出授权提示,跟随它进去授权
在那个网站上面无法获取refresh token,提示"error": "invalid_grant",
按要求操作哦
就是按照要求操作了,在获取refreshtoken的时候提示invalid_grant,也没有给我返回refresh_token
那就是账号没有API权限
不能获取refresh_token
报错
建议用 cloudflare 版
打开网页加载完之后一片白屏,没有内容,请问可能是什么原因?
建议用 cloudflare 版
果然成功了,感谢@(你懂的)
大佬 同使用腾讯云出现这个问题 有办法解决吗 谢谢 cf可以用但太慢了@(狂汗)
腾讯云版恐将放弃维护
演示地址打不开
老域名挂了没换,现在好了
个人网盘常有变化,图片和资料难保
有没有自己服务器安装的教程
后端建议放 cloudflare,然后把 index.html 扔到自己服务器就行了,不明白可以加群。
腾讯函数代码:{"errorCode":-1,"errorMessage":"user code exception caught","stackTrace":"Traceback (most recent call last):\n File \"/var/user/index.py\", line 84, in main_handler\n return gen_response(router(event))\n File \"/var/user/index.py\", line 40, in router\n host = event['headers']['host']\nKeyError: 'headers'"}
有这个错误,我用github和放自己服务器都是显示空白
应该是后端部署错误,正常响应和文中描述相同。
速度真快@(滑稽)
滑稽令我心慌@(狂汗)
LZ这个的确是个好东西,希望能坚持维护,哈哈@(捂嘴笑)
老大啊 部署后端代码在腾讯那里测试 返回是这样的
{"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"Cannot read property 'file' of undefined\nTypeError: Cannot read property 'file' of undefined\n at EventHandler.exports.main_handler [as realHandler] (/var/user/index.js:194:27)\n at EventHandler.handle (/var/runtime/node8/bootstrap.js:405:28)\n at invoke (/var/runtime/node8/bootstrap.js:208:22)\n at Timeout.setTimeout [as _onTimeout] (/var/runtime/node8/bootstrap.js:137:9)\n at ontimeout (timers.js:475:11)\n at tryOnTimeout (timers.js:310:5)\n at Timer.listOnTimeout (timers.js:270:5)"}
后端不能直接打开,把前端也部署好
好的,现在用Github Pages部署成功,能访问了。但是我把前端文件index.html放到自己的服务器就是空白页面,用的是宝塔面板。是不是还有什么东西要加
没有了,可能是宝塔没配置好,可以加群详聊
添加触发方式
操作未授权 ([TencentCloudSDKError] Code=InternalError.GetRoleError, Message=[QC_STS] role not exi
linux 服务器能搞这个吗?
GetRoleError 是因为没有权限,首次进入腾讯云 scf 根据提示完成授权。Linux 服务器可以用 Oneindex
refresh_token 填写林 没跳转啊 获取不到。。
网盘名称字体如何更改?
字体当然是 css,f12 调试下就能看到,搞不定可以加群
大佬,这个能和以前那个一样自定义域名访问吗?@(乖)
支持,如果使用了 github 部署前端,参考该教程绑定域名https://www.cnblogs.com/ljsh/p/10841670.html
既然你有博客,把前端放到自己服务器上更简单
这个……直接放服务器根目录?还是怎样@(小乖)小白求教
是的,比如你的站点目录是 /www/wwwroot/www.zhouli.online,进入该目录,新建文件夹 pan,然后把 index.html 放到 pan 目录下就可以通过 www.zhouli.online/pan/ 访问它了
多谢大佬!!成功了!就是如果我只想绑定域名怎么搞?还是上面那个办法吗要用github托管?还是可以用自己服务器@(太开心)
都可以,用 github 就看我上面发的链接。用自己的服务器就新建一个站点,比如目录是/www/wwwroot/pan.zhouli.online,把 index.html 放到该目录下面,把域名解析到该站点即可