一个基于 Tauri + React + TypeScript 开发的跨平台桌面应用,用于批量导出飞书(Feishu/Lark)文档和文件。
- 前端框架: React 19 + TypeScript + Vite
- UI 组件库: Ant Design 5.x
- 桌面框架: Tauri 2.x (Rust)
- 数据库: SQLite (通过 Tauri SQL 插件)
- HTTP 客户端: Axios + 自定义 Tauri 适配器
- 状态管理: React Hooks
- 跨平台支持: 基于 Tauri 框架,支持 Windows、macOS、Linux
- 原生性能: Rust 后端提供高性能文件操作和网络请求
- 安全性: Tauri 的安全沙箱机制,最小化系统权限
- 现代化 UI: 响应式设计,支持深色/浅色主题
- 增量下载: 支持断点续传和任务恢复
- 并发控制: 智能的下载任务管理和进度跟踪
- 云盘文件浏览: 支持浏览飞书云盘中的文件和文件夹
- 知识库导航: 完整的知识库空间和文档树形结构展示
- 文件类型支持: 支持文档、表格、演示文稿、PDF 等多种文件格式
- 实时搜索: 快速定位目标文件和文档
- 选择性下载: 支持单个文件、文件夹或整个知识库的下载
- 格式转换: 自动将飞书文档导出为 PDF、Word、Excel 等格式
- 目录结构保持: 下载时保持原有的文件夹层级结构
- 进度监控: 实时显示下载进度和状态
- 任务队列: 支持多个下载任务并行执行
- 断点续传: 网络中断后可恢复下载
- 任务历史: 查看历史下载记录和状态
- 错误处理: 智能重试机制和详细的错误信息
- OAuth 2.0: 安全的飞书 OAuth 授权流程
- Token 管理: 自动刷新访问令牌
- 权限控制: 最小化权限原则,仅申请必要的 API 权限
- 操作系统:
- Windows 10 (1903+) / Windows 11
- macOS 12.0+
- Linux (Ubuntu 18.04+, Debian 10+, CentOS 8+)
- 内存: 4GB RAM
- 存储: 100MB 可用空间
- 网络: 稳定的互联网连接
- 内存: 8GB+ RAM
- 存储: 1GB+ 可用空间(用于缓存下载文件)
- 网络: 宽带连接(提升下载速度)
- 访问 Releases 页面
- 下载适合您操作系统的安装包:
- Windows:
feishu_docs_export_x.x.x_x64_en-US.msi - macOS (Intel):
feishu_docs_export_x.x.x_x64.dmg - macOS (Apple Silicon):
feishu_docs_export_x.x.x_aarch64.dmg - Linux:
feishu_docs_export_x.x.x_amd64.deb或feishu_docs_export_x.x.x_amd64.AppImage
- Windows:
- 运行安装包并按照提示完成安装
💡 自动构建: 所有发布版本都通过 GitHub Actions 自动构建,确保代码质量和安全性
# 安装 Node.js (推荐 18.x+)
# 安装 Rust (推荐最新稳定版)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 安装 Tauri CLI
cargo install tauri-cli# 克隆仓库
git clone https://github.com/ytcheng/feishu_docs_export.git
cd feishu_docs_export
# 安装依赖
npm install
# 开发模式运行
npm run tauri dev
# 构建生产版本
npm run tauri build- 访问 飞书开放平台
- 创建企业自建应用
- 记录应用的
App ID和App Secret
在应用管理后台的「权限管理」中开通以下权限:
必需权限:
docs:doc- 查看、评论和导出文档docs:document.media:download- 下载文档中的媒体文件docs:document:export- 导出文档为其他格式docx:document- 访问新版文档drive:drive- 查看云盘信息drive:file- 查看云盘文件drive:file:download- 下载云盘文件offline_access- 获取 refresh tokenbitable:app- 查看、评论、编辑和管理多维表格wiki:wiki- 查看、编辑和管理知识库sheets:spreadsheet- 查看、评论、编辑和管理电子表格
在应用的「安全设置」中添加重定向 URL:
http://localhost:3000/callback
http://localhost:3001/callback
- 启动应用后,首次使用会自动跳转到设置页面
- 填写飞书应用信息:
- App ID: 您的飞书应用 ID
- App Secret: 您的飞书应用密钥
- API 端点: 保持默认值
https://open.feishu.cn/open-apis
- 点击「保存配置」
- 配置完成后会跳转到授权页面
- 点击「开始授权」按钮
- 在弹出的浏览器窗口中完成飞书登录和授权
- 授权成功后自动返回应用主界面
- 云盘文件: 在主界面展开「我的云盘」节点浏览文件
- 知识库: 展开「知识库」节点浏览各个知识空间的文档
- 选择要下载的文件或文件夹(支持多选)
- 点击「下载选中项」按钮
- 选择本地保存路径
- 输入任务名称和描述(可选)
- 点击「开始下载」
- 点击顶部「任务列表」查看所有下载任务
- 支持暂停、恢复、删除任务
- 点击「查看文件」可查看任务中的具体文件列表
- 点击「打开文件夹」可直接打开下载目录
本项目使用 GitHub Actions 实现自动化构建和发布:
- 触发条件: 推送
v*格式的 Git 标签(如v1.0.0) - 构建平台: 自动构建 Windows、macOS (Intel + Apple Silicon)、Linux 版本
- 发布方式: 自动创建 GitHub Release 并上传安装包
# 创建发布版本
git tag v1.0.0
git push origin v1.0.0- 触发条件: 推送到
main或develop分支,以及 Pull Request - 检查项目: 代码 lint、单元测试、跨平台构建测试
- 支持平台: Windows、macOS、Linux
feishu_docs_export/
├── src/ # React 前端源码
│ ├── components/ # React 组件
│ │ ├── AuthPage.tsx # 授权页面
│ │ ├── HomePage.tsx # 主页面
│ │ ├── TaskListPage.tsx # 任务列表
│ │ └── SettingsPage.tsx # 设置页面
│ ├── types/ # TypeScript 类型定义
│ ├── utils/ # 工具函数
│ │ ├── feishuApi.ts # 飞书 API 封装
│ │ ├── taskManager.ts # 任务管理
│ │ └── http.ts # HTTP 适配器
│ └── App.tsx # 主应用组件
├── src-tauri/ # Tauri 后端源码
│ ├── src/ # Rust 源码
│ ├── capabilities/ # 权限配置
│ └── tauri.conf.json # Tauri 配置
├── package.json # Node.js 依赖
└── README.md # 项目文档
# 安装依赖
npm install
# 开发模式(热重载)
npm run tauri dev
# 类型检查
npm run build
# 构建生产版本
npm run tauri build
# 预览构建结果
npm run preview- 开发模式下按
F12打开开发者工具 - 查看 Rust 后端日志:
cargo tauri dev -- --verbose - 数据库文件位置:
src-tauri/.data/feishu_docs_export.db
欢迎提交 Issue 和 Pull Request!
- 使用清晰的标题描述问题
- 提供详细的重现步骤
- 包含错误日志和截图(如适用)
- 说明您的操作系统和应用版本
- Fork 本仓库
- 创建特性分支:
git checkout -b feature/amazing-feature - 提交更改:
git commit -m 'Add amazing feature' - 推送分支:
git push origin feature/amazing-feature - 创建 Pull Request
- 遵循 TypeScript 和 Rust 的最佳实践
- 添加适当的注释和文档
- 确保代码通过 lint 检查
- 为新功能添加测试用例
本项目采用 MIT 许可证。
- Tauri - 现代化的桌面应用框架
- React - 用户界面库
- Ant Design - 企业级 UI 设计语言
- 飞书开放平台 - 提供强大的 API 支持
如果您在使用过程中遇到问题,可以通过以下方式获取帮助:
- 📋 提交 Issue
⭐ 如果这个项目对您有帮助,请给我们一个 Star!




