利用onedrive自建网盘
前言
一直想做一个视频站用来存天依的mv来着,奈何视频站成本太高了根本做不起…
然后无意间发现了onedrive这个好东西,利用onedrive-cf-index或OneManager-php等可以白嫖微软的大容量网盘,本篇文章记录onedrive-cf-index搭建的全过程。
部署过程
部署之前你得有一个OneDrive账号
生成OneDrive API令牌
1. 访问 URL 创建新的 Blade app:
- Microsoft Azure App registrations(普通版 OneDrive)
- Microsoft Azure.cn App registrations(OneDrive 世纪互联版本)
- 建议将语言设置为「英语」以保证以下步骤中提到的模块和按钮的名称一致:
- 使用你的 Microsoft 账户登录,选择
New registration
; - 在
Name
处设置 Blade app 的名称,比如my-onedrive-cf-index
; - 将
Supported account types
设置为Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)
。OneDrive 世纪互联用户设置为:任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户
; - 将
Redirect URI (optional)
设置为Web
(下拉选项框)以及http://localhost
(URL 地址); - 点击
Register
.
2. 获取client_id
打开注册好的应用,查看client_id
3.创建Client secret
打开 证书和密码
面板,点击 新客户端密码
,创建一个新的叫做 client_secret
的 Client secret,并将 截止期限
设置为 Never
。点击 添加
并复制 client_secret
的 Value
并保存下来 (仅有此一次机会):
4.添加权限
打开 API permissions
面板,选择 Microsoft Graph
,选择 Delegated permissions
,并搜索 offline_access, Files.Read, Files.Read.All
这三个权限,选择这三个权限,并点击 Add permissions
:
你应该确保开启前三个权限:
5.获取refresh_token
前往nodejs中文网下载nodejs安装之后在命令行运行:
npx @beetcb/ms-graph-cli
依次选择onedrive版本并输入client_id、client_secret,然后回车等待跳转本地地址,最后将本地地址粘贴进来,最后得到refresh_token
这里使用官方演示动图
最后,官方建议建一个文件夹用来分享,而不是分享主目录,默认为 /Public
Cloudflare部署
提示,你需要在cloudflare有一个绑定的域名,我这里用的是freedom的免费域名
1.获取cloudflare的令牌
打开 https://dash.cloudflare.com/login 登录,选择你绑定的域名,下拉,右下角可以看到自己的区域ID(zone_id)和账号id(account_id)
在
Workers
->管理 Workers
->创建 Worker
处创建一个worker(注意,Workers决定将来的域名前缀),保存部署即可
2.配置项目
1. cloneonedrive-cf-index项目到本地
2. 在项目目录依次输入(需要nodejs环境)
# 安装 CloudFlare Workers 官方编译部署工具
npm i @cloudflare/wrangler -g
# 使用 npm 安装依赖
npm install
# 使用 wrangler 登录 CloudFlare 账户
wrangler login
# 使用这一命令检查自己的登录状态
wrangler whoami```
创建叫做 BUCKET 的 Cloudflare Workers KV bucket:
# 创建 KV bucket wrangler kv:namespace create "BUCKET" # ... 或者,创建包括预览功能的 KV bucket wrangler kv:namespace create "BUCKET" --preview
修改目录下的
wrangler.toml
更改为之前获取到的各种idname
:之前创建的 worker 名称,我们的 Worker 默认会发布到这一域名下:<name>.<worker_subdomain>.workers.dev
;account_id
:我们的 Cloudflare 账号ID;zone_id
:我们的 Cloudflare 地区ID。
修改
wrangler.toml
里面的kv_namespaces
仅需替换 id 和(或者)preview_id 即可。如果不需要预览功能,那么移除 preview_id 即可。
修改 src/config/default.js
client_id
:刚刚获取的 OneDriveclient_id
;base
:之前创建的base
目录;- 如果你部署常规国际版 OneDrive,那么忽略以下步骤即可;
- 如果你部署的是由世纪互联运营的中国版 OneDrive:
- 修改
type
下的accountType
为1
; - 保持
driveType
不变;
- 修改
- 如果你部署的是 SharePoint 服务:
- 保持
accountType
不变; - 修改
driveType
下的type
为1
; - 并根据你的 SharePoint 服务修改
hostName
和sitePath
。
- 保持
添加 Cloudflare Workers 环境变量
# 添加我们的 refresh_token 和 client_secret wrangler secret put REFRESH_TOKEN # ... 并在这里粘贴我们的 refresh_token wrangler secret put CLIENT_SECRET # ... 并在这里粘贴我们的 client_secret wrangler secret put AUTH_PASSWORD # ... 在这里输入我们自己设置的认证密码
3.预览&发布
最后,终于到发布了
#如果配置的预览可以先预览
wrangler preview
#打包发布
wrangler publish
最后,访问发布得到的地址即可
这是我往onedrive里随便存的文件,可以看到是没问题的
大功告成
就像这样了,有空再美化一下,还得研究一下onedrive上传方案