利用onedrive自建网盘

前言

一直想做一个视频站用来存天依的mv来着,奈何视频站成本太高了根本做不起…

然后无意间发现了onedrive这个好东西,利用onedrive-cf-indexOneManager-php等可以白嫖微软的大容量网盘,本篇文章记录onedrive-cf-index搭建的全过程。

部署过程

部署之前你得有一个OneDrive账号

生成OneDrive API令牌

1. 访问 URL 创建新的 Blade app:

  1. 建议将语言设置为「英语」以保证以下步骤中提到的模块和按钮的名称一致
  2. 使用你的 Microsoft 账户登录,选择 New registration
  3. Name 处设置 Blade app 的名称,比如 my-onedrive-cf-index
  4. Supported account types 设置为 Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)。OneDrive 世纪互联用户设置为:任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户
  5. Redirect URI (optional) 设置为 Web(下拉选项框)以及 http://localhost(URL 地址);
  6. 点击 Register.

注册应用

2. 获取client_id

打开注册好的应用,查看client_id

获取client_id

3.创建Client secret

打开 证书和密码 面板,点击 新客户端密码,创建一个新的叫做 client_secret 的 Client secret,并将 截止期限 设置为 Never。点击 添加 并复制 client_secretValue 并保存下来 (仅有此一次机会)

创建Client secret

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

这里使用官方演示动图

demo.svg

最后,官方建议建一个文件夹用来分享,而不是分享主目录,默认为 /Public

Cloudflare部署

提示,你需要在cloudflare有一个绑定的域名,我这里用的是freedom的免费域名

1.获取cloudflare的令牌

  1. 打开 https://dash.cloudflare.com/login 登录,选择你绑定的域名,下拉,右下角可以看到自己的区域ID(zone_id)和账号id(account_id)

    查看各种id

  2. Workers -> 管理 Workers -> 创建 Worker 处创建一个worker(注意,Workers决定将来的域名前缀),保存部署即可

创建Workers

2.配置项目

​ 1. cloneonedrive-cf-index项目到本地

​ 2. 在项目目录依次输入(需要nodejs环境)

# 安装 CloudFlare Workers 官方编译部署工具
npm i @cloudflare/wrangler -g

# 使用 npm 安装依赖
npm install

# 使用 wrangler 登录 CloudFlare 账户
wrangler login

# 使用这一命令检查自己的登录状态
wrangler whoami```
  1. 创建叫做 BUCKET 的 Cloudflare Workers KV bucket:

    # 创建 KV bucket
    wrangler kv:namespace create "BUCKET"
    
    # ... 或者,创建包括预览功能的 KV bucket
    wrangler kv:namespace create "BUCKET" --preview
    
  2. 修改目录下的wrangler.toml更改为之前获取到的各种id

    • name:之前创建的 worker 名称,我们的 Worker 默认会发布到这一域名下:<name>.<worker_subdomain>.workers.dev
    • account_id:我们的 Cloudflare 账号ID;
    • zone_id:我们的 Cloudflare 地区ID。
  3. 修改 wrangler.toml里面的 kv_namespaces

    仅需替换 id 和(或者)preview_id 即可。如果不需要预览功能,那么移除 preview_id 即可。

  4. 修改 src/config/default.js

    • client_id:刚刚获取的 OneDrive client_id
    • base:之前创建的 base 目录;
    • 如果你部署常规国际版 OneDrive,那么忽略以下步骤即可;
    • 如果你部署的是由世纪互联运营的中国版 OneDrive:
      • 修改 type 下的 accountType1
      • 保持 driveType 不变;
    • 如果你部署的是 SharePoint 服务:
      • 保持 accountType 不变;
      • 修改 driveType 下的 type1
      • 并根据你的 SharePoint 服务修改 hostNamesitePath
  5. 添加 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

大功告成

就像这样了,有空再美化一下,还得研究一下onedrive上传方案


利用onedrive自建网盘
http://blog.233c.cn/posts/10006/
作者
木末君
发布于
2021年6月29日
许可协议