{"id":13678812,"url":"https://github.com/spencerwooo/onedrive-cf-index","last_synced_at":"2025-04-29T15:33:22.624Z","repository":{"id":37915562,"uuid":"285238974","full_name":"spencerwooo/onedrive-cf-index","owner":"spencerwooo","description":"Deprecated, use new project 👇","archived":true,"fork":false,"pushed_at":"2022-01-01T04:12:22.000Z","size":1151,"stargazers_count":1080,"open_issues_count":27,"forks_count":439,"subscribers_count":10,"default_branch":"main","last_synced_at":"2024-08-02T13:24:45.128Z","etag":null,"topics":["cloudflare-worker","cloudflare-workers","onedrive"],"latest_commit_sha":null,"homepage":"https://github.com/spencerwooo/onedrive-vercel-index","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spencerwooo.png","metadata":{"files":{"readme":"README-CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-05T09:16:08.000Z","updated_at":"2024-07-24T06:16:48.000Z","dependencies_parsed_at":"2022-07-19T23:34:31.812Z","dependency_job_id":null,"html_url":"https://github.com/spencerwooo/onedrive-cf-index","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerwooo%2Fonedrive-cf-index","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerwooo%2Fonedrive-cf-index/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerwooo%2Fonedrive-cf-index/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spencerwooo%2Fonedrive-cf-index/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spencerwooo","download_url":"https://codeload.github.com/spencerwooo/onedrive-cf-index/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224179134,"owners_count":17269009,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare-worker","cloudflare-workers","onedrive"],"created_at":"2024-08-02T13:00:58.611Z","updated_at":"2024-11-11T21:31:32.895Z","avatar_url":"https://github.com/spencerwooo.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","others"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimage src=\"assets/onedrive-cf-index.png\" alt=\"onedrive-cf-index\" width=\"150px\" /\u003e\n  \u003ch3\u003e\u003ca href=\"https://storage.spencerwoo.com\"\u003eonedrive-cf-index\u003c/a\u003e\u003c/h3\u003e\n  \u003cem\u003e由 CloudFlare Workers 强力驱动的 OneDrive 索引\u003c/em\u003e\n\u003c/div\u003e\n\n---\n\n[![Hosted on Cloudflare Workers](https://img.shields.io/badge/Hosted%20on-CF%20Workers-f38020?logo=cloudflare\u0026logoColor=f38020\u0026labelColor=282d33)](https://storage.spencerwoo.com/)\n[![Deploy](https://github.com/spencerwooo/onedrive-cf-index/workflows/Deploy/badge.svg)](https://github.com/spencerwooo/onedrive-cf-index/actions?query=workflow%3ADeploy)\n[![README-CN](assets/chinese.svg)](./README-CN.md)\n\n\u003ch5\u003e本项目使用 CloudFlare Workers 帮助你免费部署与分享你的 OneDrive 文件。本项目极大源自：\u003ca href=\"https://github.com/heymind/OneDrive-Index-Cloudflare-Worker\"\u003eonedrive-index-cloudflare-worker\u003c/a\u003e，致敬。\u003c/h5\u003e\n\n## Demo\n\n在线演示：[Spencer's OneDrive Index](https://storage.spencerwoo.com/).\n\n![Screenshot Demo](assets/screenshot.png)\n\n## 功能\n\n### 🚀 功能一览\n\n- 全新「面包屑」导航栏；\n- 令牌凭证由 Cloudflare Workers 自动刷新，并保存于（免费的）全局 KV 存储中；\n- 使用 [Turbolinks®](https://github.com/turbolinks/turbolinks) 实现路由懒加载；\n- 支持由世纪互联运营的 OneDrive 版本；\n- 支持 SharePoint 部署；\n\n### 🗃️ 目录索引显示\n\n- 全新支持自定义的设计风格：[spencer.css](themes/spencer.css)；\n- 支持使用 Emoji 作为文件夹图标（如果文件夹名称第一位是 Emoji 则自动开启该功能）；\n- 渲染 `README.md` 如果当前目录下包含此文件，使用 [github-markdown-css](https://github.com/sindresorhus/github-markdown-css) 渲染样式；\n- 支持「分页」，没有一个目录仅限显示 200 个项目的限制了！\n\n### 📁 文件在线预览\n\n- 根据文件类型渲染文件图标，图标使用 [Font Awesome icons](https://fontawesome.com/)；\n- 支持预览：\n  - 纯文本：`.txt`. [_DEMO_](https://storage.spencerwoo.com/%F0%9F%A5%9F%20Some%20test%20files/Previews/iso_8859-1.txt).\n  - Markdown 格式文本：`.md`, `.mdown`, `.markdown`. [_DEMO_](https://storage.spencerwoo.com/%F0%9F%A5%9F%20Some%20test%20files/Previews/i_m_a_md.md).\n  - 图片（支持 Medium 风格的图片缩放）：`.png`, `.jpg`, and `.gif`. [_DEMO_](https://storage.spencerwoo.com/%F0%9F%A5%9F%20Some%20test%20files/Previews/).\n  - 代码高亮：`.js`, `.py`, `.c`, `.json`... [_DEMO_](https://storage.spencerwoo.com/%F0%9F%A5%9F%20Some%20test%20files/Code/pathUtil.js).\n  - PDF（支持懒加载、加载进度、Chrome 内置 PDF 阅读器）：`.pdf`. [_DEMO_](\u003chttps://storage.spencerwoo.com/%F0%9F%A5%91%20Course%20PPT%20for%20CS%20(BIT)/2018%20-%20%E5%A4%A7%E4%BA%8C%E4%B8%8B%20-%20%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6/1%20FoundationofCG-Anonymous.pdf\u003e).\n  - 音乐：`.mp3`, `.aac`, `.wav`, `.oga`. [_DEMO_](https://storage.spencerwoo.com/%F0%9F%A5%9F%20Some%20test%20files/Multimedia/Elysian%20Fields%20-%20Climbing%20My%20Dark%20Hair.mp3).\n  - 视频：`.mp4`, `.flv`, `.webm`, `.m3u8`. [_DEMO_](https://storage.spencerwoo.com/%F0%9F%A5%9F%20Some%20test%20files/Multimedia/%E8%BD%A6%E5%BA%93%E5%A5%B3%E7%8E%8B%20%E9%AB%98%E8%B7%9F%E8%B9%A6%E8%BF%AA%20%E4%B9%98%E9%A3%8E%E7%A0%B4%E6%B5%AA%E7%9A%84%E5%A7%90%E5%A7%90%E4%B8%BB%E9%A2%98%E6%9B%B2%E3%80%90%E9%86%8B%E9%86%8B%E3%80%91.mp4).\n\n### 🔒 私有文件夹\n\n![Private folders](assets/private-folder.png)\n\n我们可以给某个特定的文件夹（目录）上锁，需要认证才能访问。我们可以在 `src/auth/config.js` 文件中将我们想要设为私有文件夹的目录写入 `ENABLE_PATHS` 列表中。我们还可以自定义认证所使用的用户名 `NAME` 以及密码，其中认证密码保存于 `AUTH_PASSWORD` 环境变量中，需要使用 wrangler 来设置这一环境变量：\n\n```bash\nwrangler secret put AUTH_PASSWORD\n# 在这里输入你自己的认证密码\n```\n\n有关 wrangler 的使用细节等详细内容，请参考 [接下来的部分段落](#准备工作)。\n\n### ⬇️ 代理下载文件 / 文件直链访问\n\n- [可选] Proxied download（代理下载文件）：`?proxied` - 经由 CloudFlare Workers 下载文件，如果（1）`config/default.js` 中的 `proxyDownload` 为 `true`，以及（2）使用参数 `?proxied` 请求文件；\n- [可选] Raw file download（文件直链访问）：`?raw` - 返回文件直链而不是预览界面；\n- 两个参数可以一起使用，即 `?proxied\u0026raw` 和 `?raw\u0026proxied` 均有效。\n\n是的，这也就意味着你可以将这一项目用来搭建「图床」，或者用于搭建静态文件部署服务，比如下面的图片链接：\n\n```\nhttps://storage.spencerwoo.com/%F0%9F%A5%9F%20Some%20test%20files/nyancat.gif?raw\n```\n\n![](https://storage.spencerwoo.com/%F0%9F%A5%9F%20Some%20test%20files/nyancat.gif?raw)\n\n### 其他功能\n\n请参考原项目的「🔥 新特性 V1.1」部分：[onedrive-index-cloudflare-worker](https://github.com/heymind/OneDrive-Index-Cloudflare-Worker#-%E6%96%B0%E7%89%B9%E6%80%A7-v11)，**但我不保证全部功能均可用，因为本项目改动部分很大。**\n\n## 部署指南\n\n_又臭又长的中文版部署指南预警！_\n\n### 生成 OneDrive API 令牌\n\n1. 访问此 URL 创建新的 Blade app：[Microsoft Azure App registrations](https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)（普通版 OneDrive）或 [Microsoft Azure.cn App registrations](https://portal.azure.cn/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)（OneDrive 世纪互联版本），**建议将语言设置为「英语」以保证以下步骤中提到的模块和按钮的名称一致**：\n\n   1. 使用你的 Microsoft 账户登录，选择 `New registration`；\n   2. 在 `Name` 处设置 Blade app 的名称，比如 `my-onedrive-cf-index`；\n   3. 将 `Supported account types` 设置为 `Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)`。OneDrive 世纪互联用户设置为：`任何组织目录（任何 Azure AD 目录 - 多租户）中的帐户`；\n   4. 将 `Redirect URI (optional)` 设置为 `Web`（下拉选项框）以及 `http://localhost`（URL 地址）；\n   5. 点击 `Register`.\n\n   ![](assets/register-app.png)\n\n2. 在 `Overview` 面板获取你的 Application (client) ID - `client_id`：\n\n   ![](assets/client-id.png)\n\n3. 打开 `Certificates \u0026 secrets` 面板，点击 `New client secret`，创建一个新的叫做 `client_secret` 的 Client secret，并将 `Expires` 设置为 `Never`。点击 `Add` 并复制 `client_secret` 的 `Value` 并保存下来 **（仅有此一次机会）**：\n\n   ![](assets/add-client-secret.png)\n\n4. 打开 `API permissions` 面板，选择 `Microsoft Graph`，选择 `Delegated permissions`，并搜索 `offline_access, Files.Read, Files.Read.All` 这三个权限，**选择这三个权限，并点击 `Add permissions`：**\n\n   ![](assets/add-permissions.png)\n\n   你应该成功开启这三个权限：\n\n   ![](assets/permissions-used.png)\n\n5. 获取 `refresh_token`，在本机（需要 Node.js 和 npm 环境，安装和推荐配置请参考 [准备工作](#准备工作)）上面执行如下命令：\n\n   ```sh\n   npx @beetcb/ms-graph-cli\n   ```\n\n   \u003cdiv align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/beetcb/ms-graph-cli/master/media/demo.svg\" alt=\"demo gif\" width=\"560px\" /\u003e\u003c/div\u003e\n\n   根据你自己的情况选择合适的选项，并输入我们上面获取到的一系列 token 令牌配置等，其中 `redirect_url` 可以直接设置为 `http://localhost`。有关命令行工具的具体使用方法请参考：[beetcb/ms-graph-cli](https://github.com/beetcb/ms-graph-cli)。\n\n6. 最后，在我们的 OneDrive 中创建一个公共分享文件夹，比如 `/Public` 即可。建议不要直接分享根目录!\n\n最后，这么折腾完，我们应该成功拿到如下的几个凭证：\n\n- `refresh_token`\n- `client_id`\n- `client_secret`\n- `redirect_uri`\n- `base`：默认为 `/Public`。\n\n_是，我知道很麻烦，但是这是微软，大家理解一下。🤷🏼‍♂️_\n\n### 准备工作\n\nFork 再 clone 或者直接 clone 本仓库，并安装依赖 Node.js、`npm` 以及 `wrangler`。\n\n_强烈建议大家使用 Node version manager 比如 [n](https://github.com/tj/n) 或者 [nvm](https://github.com/nvm-sh/nvm) 安装 Node.js 和 `npm`，这样我们全局安装的 `wrangler` 就可以在我们的用户目录下安装保存配置文件了，也就不会遇到奇奇怪怪的权限问题了。_\n\n```sh\n# 安装 CloudFlare Workers 官方编译部署工具\nnpm i @cloudflare/wrangler -g\n\n# 使用 npm 安装依赖\nnpm install\n\n# 使用 wrangler 登录 CloudFlare 账户\nwrangler login\n\n# 使用这一命令检查自己的登录状态\nwrangler whoami\n```\n\n打开 \u003chttps://dash.cloudflare.com/login\u003e 登录 CloudFlare，选择自己的域名，**再向下滚动一点，我们就能看到右侧栏处我们的 `account_id` 以及 `zone_id` 了。** 同时，在 `Workers` -\u003e `Manage Workers` -\u003e `Create a Worker` 处创建一个 **DRAFT** worker。\n\n修改我们的 [`wrangler.toml`](wrangler.toml)：\n\n- `name`：就是我们刚刚创建的 draft worker 名称，我们的 Worker 默认会发布到这一域名下：`\u003cname\u003e.\u003cworker_subdomain\u003e.workers.dev`；\n- `account_id`：我们的 Cloudflare Account ID；\n- `zone_id`：我们的 Cloudflare Zone ID。\n\n创建叫做 `BUCKET` 的 Cloudflare Workers KV bucket：\n\n```sh\n# 创建 KV bucket\nwrangler kv:namespace create \"BUCKET\"\n\n# ... 或者，创建包括预览功能的 KV bucket\nwrangler kv:namespace create \"BUCKET\" --preview\n```\n\n预览功能仅用于本地测试，和页面上的图片预览功能无关。\n\n修改 [`wrangler.toml`](wrangler.toml) 里面的 `kv_namespaces`：\n\n- `kv_namespaces`：我们的 Cloudflare KV namespace，仅需替换 `id` 和（或者）`preview_id` 即可。_如果不需要预览功能，那么移除 `preview_id` 即可。_\n\n修改 [`src/config/default.js`](src/config/default.js)：\n\n- `client_id`：刚刚获取的 OneDrive `client_id`；\n- `base`：之前创建的 `base` 目录；\n- 如果你部署常规国际版 OneDrive，那么忽略以下步骤即可；\n- 如果你部署的是由世纪互联运营的中国版 OneDrive：\n  - 修改 `type` 下的 `accountType` 为 `1`；\n  - 保持 `driveType` 不变；\n- 如果你部署的是 SharePoint 服务：\n  - 保持 `accountType` 不变；\n  - 修改 `driveType` 下的 `type` 为 `1`；\n  - 并根据你的 SharePoint 服务修改 `hostName` 和 `sitePath`。\n\n使用 `wrangler` 添加 Cloudflare Workers 环境变量（有关认证密码的介绍请见 [🔒 私有文件夹](#-私有文件夹)）：\n\n```sh\n# 添加我们的 refresh_token 和 client_secret\nwrangler secret put REFRESH_TOKEN\n# ... 并在这里粘贴我们的 refresh_token\n\nwrangler secret put CLIENT_SECRET\n# ... 并在这里粘贴我们的 client_secret\n\nwrangler secret put AUTH_PASSWORD\n# ... 在这里输入我们自己设置的认证密码\n```\n\n### 编译与部署\n\n我们可以使用 `wrangler` 预览部署：\n\n```sh\nwrangler preview\n```\n\n如果一切顺利，我们即可使用如下命令发布 Cloudflare Worker：\n\n```sh\nwrangler publish\n```\n\n我们也可以创建一个 GitHub Actions 来在每次 `push` 到 GitHub 仓库时自动发布新的 Worker，详情参考：[main.yml](.github/workflows/main.yml)。\n\n如果想在自己的域名下部署 Cloudflare Worker，请参考：[How to Setup Cloudflare Workers on a Custom Domain](https://www.andressevilla.com/how-to-setup-cloudflare-workers-on-a-custom-domain/)。\n\n## 样式、内容的自定义\n\n- 我们 **应该** 更改默认「着落页面」，直接修改 [src/folderView.js](src/folderView.js#L51-L55) 中 `intro` 的 HTML 即可；\n- 我们也 **应该** 更改页面的 header，直接修改 [src/render/htmlWrapper.js](src/render/htmlWrapper.js#L24) 即可；\n- 样式 CSS 文件位于 [themes/spencer.css](themes/spencer.css)，可以根据自己需要自定义此文件，同时也需要更新 [src/render/htmlWrapper.js](src/render/htmlWrapper.js#L3) 文件中的 commit HASH；\n- 我们还可以自定义 Markdown 渲染 CSS 样式、PrismJS 代码高亮样式，等等等。\n\n---\n\n🏵 **onedrive-cf-index** ©Spencer Woo. Released under the MIT License.\n\nAuthored and maintained by Spencer Woo.\n\n[@Portfolio](https://spencerwoo.com/) · [@Blog](https://blog.spencerwoo.com/) · [@GitHub](https://github.com/spencerwooo)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspencerwooo%2Fonedrive-cf-index","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspencerwooo%2Fonedrive-cf-index","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspencerwooo%2Fonedrive-cf-index/lists"}