把 onedrive 部署到 serverless,作为你的图床、共享网盘

gmero ·

项目地址:edge-onedrive, 本博客大部分文章里的图片都是使用该项目进行托管的,目前代码托管在 codeberg,因为我的 github 账号因为在一个 issue 里口嗨被 hidden 了,已经在申诉了,如果申诉成功会迁移回 github

因为深受国内网盘其害,我在大学的时候就将主力网盘切换到了 OneDrive,在淘宝上买的家庭共享只要30/年就有1TB的存储空间,感觉比很多国内网盘要划算,而且没有限速,利用多线程下载器,轻松能实现满速下载。而且 OneDrive 还提供了 api,从而使其作为图床以及直链文件分享成为了可能。于是我便开发了 edge-onedrive 项目,目标时将 OneDrive 的 api 功能封装部署到边缘函数上,目前已经在 Vercel、Cloudflare、EdgeOne 上得到了验证

https://demo-edge-onedrive.sxl.cc (Cloudflare Worker)

https://demo-edge-onedrive.vercel.app (Vercel)

https://demo-edge-onedrive.gmero.com (EdgeOne)

功能说明

edge-onedrive 目前支持以下功能:

  • 图床功能:将一个文件夹作为图床目录,上传的图片可以自动重命名带上宽高信息,方便博客使用,提供一个 npm cli 包来方便接入 typora 等软件
  • 列目录,展示文件详情,显示缩略图(如果能获取到),下载文件
  • 直链下载,支持自定义过期时间(全局)
  • 访客模式,可将文件夹设置为访客模式,访客无需登录即可访问该文件夹下的内容

部署教程

可在项目仓库的 examples 目录下找到各个平台的部署示例,其中 EdgeOne 平台代码会多一些,因为进行了优化,同时利用了它的两套运行时,从而降低直链以及图床的延迟

1. fork 或下载仓库源码

目前仓库托管在 codeberg, 在 .forgejo 下能仓库所跑的 ci 自动部署流程,从而实现多平台部署,不过这属于进阶一点的操作了,感兴趣的可以看一下也很简单

2. 注册微软应用

进入 https://entra.microsoft.com/,选择应用注册 → 新注册,然后按图片填入信息

应用注册1

应用注册2

点击继续后就注册完成了,会进入应用详情页面,记住这里的应用程序ID后面配置环境变量需要,拿个记事本记录一下方便一些

应用注册3

接下来点开证书和密码,创建一个客户端密码,添加完成后一定要复制值,保存到记事本,因为后面你就看不到这个了,这个就是 secret,我们配置要用到。客户端密码截止期限没办法设置永久,快到期的时候新建一个轮转就行了

应用注册4

3. 配置环境变量、部署

系统支持额环境变量配置如下,不同平台的配置途径入口不一定一样,但大差不差,都支持在管理面板设置

变量名示例说明
CLIENT_ID6423o99f-e230-4f5e-ac11-e12aae43a3u8应用注册拿到的应用程序ID
CLIENT_SECRETSDF8Q~JkF3ubyKil-kpL.EioUFAzBieY4xnhU3dS创建的客户端密码
ENTRA_ID_ENDPOINThttps://login.microsoftonline.com认证节点
GRAPH_ENDPOINThttps://graph.microsoft.comapi节点
CORS_ORIGIN*浏览器跨域
GUEST_DIR/path访客文件夹,留空为不开启
LINK_PROXYfalse开启直链代理,开启后边缘节点会代理onedrive流量
LINK_EXPIRATION2sign过期时间,设置为0为不过期
LINK_FORCE_SIGNtrue强制sign,不允许空sign下载
PIC_DIR/pic图床文件夹,留空为不开启图床

以 Cloudflare Worker 为例,它可以在配置文件中配置非敏感的环境变量,编辑源码 examples/cf-worker 下的 wrangler.jsonc 文件,主要修改 name, kv_namespaces 下的 id,以及 vars 环境变量,修改完成后,确保你以及安装了 wrangler,并登录了,然后运行pnpm -F cf-worker exec wrangler deploy 部署,为了确保安全,CLIENT_SECRET 项我们需要去 worker 网页后台设置后重新部署

4. 初始账号配置和后台微软账号认证

部署完成后,我们进入页面,会自动跳转到初始化账号页面,如果没有跳转就点击右上角的设置图标,输入自定义的账号密码,设置成功后会进入设置页面,点击授权 OneDrive 进入授权页,需要注意的是在前面微软应用注册那里的重定向 uri(callback uri) 要与你现在的域名保持一致,比如 https://demo-edge-onedrive.sxl.cc/settings/onedrive/callback , 如果不一致可以进行新增,授权成功后,你就可以点击左上角图标进入主页查看 OneDrive 的文件了