Uppy OneDrive 插件深度解析:从版本演进看远程文件导入的实现原理
前端UI组件后端【免费下载链接】uppyThe next open source file uploader for web browsers :dog:项目地址https://gitcode.com/gh_mirrors/up/uppy点击查看免费下载导读uppy/onedrive是 Uppy 生态中负责从微软 OneDrive 账户导入文件的远程来源Remote Source插件。本文以该包的 CHANGELOG.md 为时间主线串联其 TypeScript 重构、导出映射export maps、token 刷新、列表加载性能等关键演进并结合 OneDrive.tsx 与 Companion 服务端适配器的源码实现说明插件如何接入、如何认证、如何分页拉取文件最终落到一条客户端插件 Companion 服务端的完整调用链上。读完本文你将掌握 Uppy OneDrive 插件从安装、配置到服务端鉴权与数据适配的完整实战方案。一、uppy/onedrive 插件概览它在 Uppy 中的角色1.1 定位与架构uppy/onedrive是一个 UIPlugin 类型的acquirer采集器插件。从 OneDrive.tsx 的构造函数可以确认constructor(uppy: UppyM, B, opts: OneDriveOptions) { super(uppy, opts) this.type acquirer this.storage this.opts.storage || tokenStorage this.id this.opts.id || OneDrive ... this.provider new Provider(uppy, { companionUrl: this.opts.companionUrl, companionHeaders: this.opts.companionHeaders, companionKeysParams: this.opts.companionKeysParams, companionCookiesRule: this.opts.companionCookiesRule, provider: onedrive, pluginId: this.id, supportsRefreshToken: true, }) }关键点在于插件本身不直接与微软 Graph API 通信。所有 OAuth 认证、文件列举、下载都由配套的 Companion 服务端完成浏览器端只通过companionUrl与 Companion 交互。这种Companion 代理模式把带宽消耗从用户手机端转移到服务端是 Uppy 远程来源插件的统一设计。1.2 依赖关系与公开 API从 package.json 可见唯一运行时依赖为preact^10.29.2对uppy/core是 peerDependency导出映射仅暴露.即lib/index.js与./package.json两项sideEffects: false支持摇树优化。index.ts只做两件事导出OneDriveOptions类型以及默认导出OneDrive类。OneDriveOptions的定义是CompanionPluginOptions { locale?: LocaleStringstypeof locale }也就是说所有 Companion 相关配置companionUrl、companionHeaders、companionKeysParams、companionCookiesRule、companionAllowedHosts等均被继承。二、安装与基础接入2.1 安装$ npm install uppy/onedriveuppy/onedrive要求同时安装uppy/corepeerDependency与uppy/companion服务端。也可以使用 Transloadit 的 Smart CDN 预构建 bundle此时Uppy挂载在全局window.Uppy上。2.2 最小接入代码import Uppy from uppy/core import OneDrive from uppy/onedrive const uppy new Uppy() uppy.use(OneDrive, { // 必填Companion 实例地址如 https://your-companion.example.com companionUrl: https://your-companion.example.com, // 可选随请求携带的请求头如自定义鉴权 companionHeaders: {}, // 可选Companion 允许的主机白名单 companionAllowedHosts: *, })插件安装时OneDrive.tsx 的 install()会基于this.opts.target挂载ProviderViews渲染视图未指定 target 时默认渲染到全局 Dashboard。三、CHANGELOG 主线解读OneDrive 插件的关键演进uppy/onedrive的 CHANGELOG.md 记录了 2.x 到 6.0.0 的全部变更以下梳理出对使用者影响最大的几条主线。3.1 类型系统与模块化演进2.1.0重构为 ESM#3694与 Uppy 3.0 全面 ESM 化的方向一致3.0.0随 Uppy v3.0.0 正式切换到 ESM4.0.0-beta.1 / 3.3.0将插件重构为 TypeScript#4979此后OneDriveOptions等类型得以显式导出配合export plugin options4.1.0#5433让用户可以从uppy/onedrive导入完整类型4.3.0使用 TypeScript 编译器替代 Babel 构建5.1.0uppy/core引入PluginTypeRegistry与类型化getPluginOneDrive 通过declare module uppy/core注册自己的类型见 OneDrive.tsx此后uppy.getPlugin(OneDrive)无需再传泛型即可获得具体类型。3.2 导出映射Export Maps——5.0.0 的重大变更5.0.0 的c5b51f6提交为所有包引入导出映射这是影响升级的两个破坏性变更CSS 导入路径变更由uppy/onedrive/dist/styles.min.css改为uppy/onedrive/css/styles.min.css深路径导入被禁止此前可以import something from uppy/onedrive/lib/foo.js现在只能导入根导出项。对uppy/react、uppy/vue、uppy/svelte的影响更大——需要 peer dependency 的组件被拆到子路径如uppy/react/dashboard只需要安装实际用到的 peer 依赖。对 OneDrive 而言5.0.1 还移除了 package.json 中的main字段明确导出映射即公共 API 契约。3.3 Token 刷新支持——5.0.2 的修复5edcb2f提交修复了 OneDrive 的supportsRefreshToken标志这对应 OneDrive.tsx 中的supportsRefreshToken: true。这意味着 OneDrive 插件允许使用刷新令牌机制access token 过期后客户端可以向 Companion 请求用 refresh token 换取新的 access token而无需用户重新授权。服务端实现位于 companion 的 onedrive/index.ts 的refreshToken()方法。3.4 列表加载性能——3.1.2 的 5-10 倍提速#4513的合并让 Google Drive / OneDrive 的列表加载快 510 倍并且始终加载全部文件不再只加载一页。这背后的实现细节见第 5 节的分页机制分析。3.5 其他值得注意的补丁4.2.1修复AsyncStore导入#55793.2.1修复 OneDrive 自定义 OAuth2 凭据#49682.0.5重构 locale 脚本并生成类型与文档#3276。四、Companion 侧配置OAuth 与鉴权4.1 OAuth 提供商注册OneDrive 在 Companion 中注册的 OAuth provider 名是microsoft见 onedrive/index.ts 的static override get oauthProvider()。在 config/grant.ts 中其配置为// for onedrive microsoft: { ...defaults, scope: [files.read.all, offline_access, User.Read], callback: /onedrive/callback, },files.read.all读取用户 OneDrive 中所有文件的只读权限offline_access获取刷新令牌支持长期离线访问配合上面的supportsRefreshTokenUser.Read读取用户资料用于显示用户名回调路径固定为/onedrive/callback。4.2 客户端到服务端的连接在 OneDrive.tsx 中this.opts.companionAllowedHosts getAllowedHosts( this.opts.companionAllowedHosts, this.opts.companionUrl, )getAllowedHosts用于在未显式配置companionAllowedHosts时从companionUrl推导允许的主机作为 CSRF 防护的一部分。Provider实例来自uppy/core/companion-client随后接管所有与 Companion 的 REST 通信。五、源码级实现列表、分页、下载与适配5.1 列表请求与并行优化onedrive/index.ts 的 list() 同时发起两个请求并等待两者完成GET me获取用户的mail/userPrincipalName用于在界面上显示用户名GET {root}/children获取文件列表其中 root 由me/drive默认或drives/{driveId}当查询参数携带driveId时决定路径形如me/drive/root/children或me/drive/items/{directory}/children。请求参数const qs new URLSearchParams({ $expand: thumbnails, // 展开缩略图 $top: String(pageSize), // 每页 999 条 }) const cursor queryRecord[cursor] if (cursor ! null) { qs.set($skiptoken, cursor) // 分页游标 }pageSize 999配合$skiptoken正是 3.1.2 版本5-10 倍提速、加载全部文件的实现基础以接近 Graph API 上限的页大小减少往返次数再通过游标持续翻页直到取完。5.2 数据适配器 adapter.tsGraph API 返回的原始结构通过 adapter.ts 转换为 Uppy 统一的 ProviderListResponse 结构isFolder优先依据remoteItem.folder跨驱动器共享项否则依据item.foldergetItemId对共享项返回remoteItem.idgetItemRequestPath拼接?driveId{driveId}查询参数保证后续下载/取 size 请求能定位到正确的驱动器getNextPagePath从响应的odata.nextLink中解析$skiptoken构造下一页路径没有 nextLink 时返回null结束翻页缩略图取thumbnails[0].medium.url文件夹图标固定为folder。5.3 下载与文件大小download()使用GET {root}/items/{id}/content将文件内容以流式stream方式从 OneDrive 拉到 Companion再转发给客户端size()通过GET {root}/items/{id}读取size字段。由于下载发生在服务端客户端尤其是移动端无需承受完整的 OneDrive → 浏览器流量。5.4 缩略图与登出thumbnail()刻意未实现——OneDrive 的公开缩略图 URL 直接由$expand: thumbnails提供因此 Companion 不需要二次请求见 onedrive/index.ts 的注释logout()返回revoked: false与手动撤销链接https://account.live.com/consent/Manage因为微软不支持编程式 OAuth2 token 撤销。5.5 错误处理语义#withErrorHandling统一了错误分类onedrive/index.tsHTTP 401 → 认证错误触发重新授权流程HTTP 400 / 403 → 用户可见错误并从响应 body 的error.message提取提示文案——典型场景是组织内用户未购买 Office 365 许可证 / 未初始化 OneDrive 个人站点其余错误按 tag如provider.onedrive.list.error记录到日志。六、从前端到后端的完整调用链一次从 OneDrive 导入文件的完整链路如下用户点击 OneDrive 图标内联 SVG见 OneDrive.tsx 的icon属性客户端Provider引导用户到 Companion 的/onedrive/callback完成微软 OAuth 授权Companion 用授权码换取并存储 access token含offline_accessscope 的 refresh token前端ProviderViews请求列表Companion 并行调用 Graph APIme与children经adapter.ts归一化后返回用户勾选文件Companion 流式下载到服务端并转交给上传目标如uppy/tus或uppy/aws-s3access token 过期时supportsRefreshToken: true触发刷新流程Companion 调用oauth20_token.srf换取新 tokenrefreshToken()。七、升级注意事项速查针对 CHANGELOG 中的破坏性变更从旧版本升级时重点检查变更旧写法新写法CSS 路径uppy/onedrive/dist/styles.min.cssuppy/onedrive/css/styles.min.css深路径导入uppy/onedrive/lib/foo.js仅允许根导出package.jsonmain存在已移除以 exports 为准getPlugin 类型需手动传泛型uppy.getPlugin(OneDrive)自动推断八、延伸阅读插件入口与选项类型packages/uppy/onedrive/src/OneDrive.tsx、packages/uppy/onedrive/src/index.ts插件 i18n 文案packages/uppy/onedrive/src/locale.ts服务端适配器与 OAuth 配置packages/uppy/companion/src/server/provider/onedrive/index.ts、packages/uppy/companion/src/server/provider/onedrive/adapter.ts、packages/uppy/companion/src/config/grant.ts包清单packages/uppy/onedrive/package.json赞分享前端UI组件后端【免费下载链接】uppyThe next open source file uploader for web browsers :dog:项目地址https://gitcode.com/gh_mirrors/up/uppy点击查看免费下载相关推荐actions-runner-controller 监控与故障排查实战指南Prometheus 指标采集与高频故障修复手册actions runner controller 监控与故障排查实战指南Prometheus 指标采集与高频故障修复手册 本文面向使用 actions ru前端UI组件后端xv6进程管理深水区进程状态机与proc.c进程表设计剖析xv6进程管理深水区进程状态机与proc.c进程表设计剖析 想真正搞懂操作系统 进程管理 的原理MIT 的教学内核 xv6 是最经典的选择。本文带你深入 x前端UI组件后端uppy/box 插件开发指南Box 云盘文件导入的技术原理与版本演进uppy/box 插件开发指南Box 云盘文件导入的技术原理与版本演进 导读 uppy/box 是 Uppy 生态中用于从用户的 Box 云盘账号导入文件前端UI组件后端上一篇Vue Flow连接线组件标记显示问题解析下一篇MediaPipe-TouchDesigner插件中图像分辨率与翻转参数的技术探讨创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

边缘端AI算力选型实战:从场景反推芯片的两年踩坑经验

边缘端AI算力选型实战:从场景反推芯片的两年踩坑经验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:56:44 阅读更多 →
解读 DappRadar 公司档案:深入 remoteintech.company 远程科技公司目录的数据模型与构建原理

解读 DappRadar 公司档案:深入 remoteintech.company 远程科技公司目录的数据模型与构建原理

数据集 【免费下载链接】remote-jobs Source for remoteintech.company — a community-maintained directory of remote-friendly tech companies 项目地址: https://gitcode.com/GitHub_Trending/re/remote-jobs 点击查看 免费下载 导读 本文以远程科技公司目录…

2026/10/1 1:56:44 阅读更多 →
中文Alpaca量化模型效果对比评测全解读:Chinese-LLaMA-Alpaca 四组对比实验的方法、数据与复现指南

中文Alpaca量化模型效果对比评测全解读:Chinese-LLaMA-Alpaca 四组对比实验的方法、数据与复现指南

大模型人工智能预训练微调LoRA本地部署NLP模型评测 【免费下载链接】Chinese-LLaMA-Alpaca 中文LLaMA&Alpaca大语言模型本地CPU/GPU训练部署 (Chinese LLaMA & Alpaca LLMs) 项目地址: https://gitcode.com/gh_mirrors/ch/Chinese-LLaMA-Alpaca 点击查看 免…

2026/10/1 1:56:44 阅读更多 →

最新新闻

C#实现SECS/GEM通信:从HSMS到状态机全解析

C#实现SECS/GEM通信:从HSMS到状态机全解析

几年前我第一次把一台C#写的上位机接到半导体前道设备的SECS/GEM端口时,心里其实没底。对方是日本厂商的薄膜设备,EAP系统要求必须通过SECS/GEM联机才能跑Recipe,而我手里只有几百页英文SEMI规范PDF,和一台连IP都没配好的旧PC。后…

2026/10/1 2:25:56 阅读更多 →
PhotoPrism 后端代码地图(CODEMAP):从入口到源码的快速导航指南

PhotoPrism 后端代码地图(CODEMAP):从入口到源码的快速导航指南

后端前端图像处理人工智能AI 应用 【免费下载链接】photoprism AI-Powered Photos App 🌈💎✨ 项目地址: https://gitcode.com/gh_mirrors/ph/photoprism 点击查看 免费下载 PhotoPrism 是一个基于 Go 与 Vue 构建的 AI 照片管理应用&#x…

2026/10/1 2:25:56 阅读更多 →
从Wiki到LaTeX教科书:Coursebook开源系统编程书的完整演进之路

从Wiki到LaTeX教科书:Coursebook开源系统编程书的完整演进之路

从Wiki到LaTeX教科书:Coursebook开源系统编程书的完整演进之路 【免费下载链接】coursebook Open Source Introductory Systems Programming Textbook for the University of Illinois 项目地址: https://gitcode.com/GitHub_Trending/co/coursebook Courseb…

2026/10/1 2:25:56 阅读更多 →
ng-table 数据分组实战:从一键分组到自定义分组函数与汇总行的完整指南

ng-table 数据分组实战:从一键分组到自定义分组函数与汇总行的完整指南

ng-table 数据分组实战:从一键分组到自定义分组函数与汇总行的完整指南 【免费下载链接】ng-table Simple table with sorting and filtering on AngularJS 项目地址: https://gitcode.com/gh_mirrors/ng/ng-table ng-table 是 AngularJS 生态中最经典的数据…

2026/10/1 2:25:56 阅读更多 →
ZCode 前端渲染性能优化:用 CSS content-visibility 实现长列表秒级首屏

ZCode 前端渲染性能优化:用 CSS content-visibility 实现长列表秒级首屏

人工智能大模型代码智能体AI Agent桌面应用后端前端CLI 【免费下载链接】ZCode ZCode 是 AI 编程工作台,提供桌面应用、浏览器界面和终端 Agent。本仓库包含客户端、后端服务、共享 UI,以及 Agent CLI 与运行时源码。 项目地址: https://gitc…

2026/10/1 2:25:56 阅读更多 →
社团管理系统JAVAEE+MYSQL+Selevt

社团管理系统JAVAEE+MYSQL+Selevt

社团管理系统 通过网盘分享的文件:高校学生社团管理系统.zip 链接: https://pan.baidu.com/s/144rb8j-HuXN21djzDnR9sw 提取码: 1122 –来自百度网盘超级会员v7的分享 1. 项目概述 社团管理系统(Community Management System)是一个基于 Java…

2026/10/1 2:24:56 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →