feishu2md

module
v0.1.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 16, 2025 License: MIT

README

feishu2md

🚀 强大的飞书文档转 Markdown 工具 - 支持单文档、批量下载和知识库导出,智能处理图片并自动上传到图床。

Go Version License


✨ 核心特性

特性 说明
📄 多种下载模式 单文档、文件夹批量、整个知识库、子文档递归下载
🖼️ 智能图片处理 自动下载图片,支持本地保存或上传图床
☁️ 图床自动上传 支持阿里云 OSS、腾讯云 COS,自动替换图片链接
🌳 保持文档结构 递归下载时保持原有层级结构
高效并发 支持多线程并发下载,智能限流
📝 友好文件名 默认使用文档标题,智能处理特殊字符
🎯 格式完整 完整支持表格、列表、代码块等 Markdown 格式
💾 智能缓存 图片和文档去重,避免重复下载和上传
🔧 配置管理 环境变量配置,一键初始化配置文件

🚀 快速开始

1. 安装
# 克隆仓库
git clone https://github.com/Perfecto23/feishu2md.git
cd feishu2md

# 编译
make build

# 或使用 go build
go build -o feishu2md ./cmd/...
2. 初始化配置
# 创建配置文件
./feishu2md init

# 编辑配置文件
vim .env

配置文件示例:

# 飞书 API 认证(必需)
FEISHU_APP_ID=your_app_id
FEISHU_APP_SECRET=your_app_secret

# 知识库配置(wiki-tree 命令需要)
FEISHU_SPACE_ID=your_space_id
FEISHU_FOLDER_TOKEN=https://xxx.feishu.cn/wiki/your_node_token

# 图床配置(可选)
IMGBED_ENABLED=true
IMGBED_PLATFORM=oss  # oss 或 cos
IMGBED_SECRET_ID=your_secret_id
IMGBED_SECRET_KEY=your_secret_key
IMGBED_BUCKET=your-bucket
IMGBED_REGION=oss-cn-hangzhou
IMGBED_PREFIX_KEY=images/
3. 开始使用
# 下载单个文档
./feishu2md document https://xxx.feishu.cn/docx/abc123

# 批量下载文件夹
./feishu2md folder https://xxx.feishu.cn/drive/folder/abc123

# 下载整个知识库
./feishu2md wiki https://xxx.feishu.cn/wiki/space/abc123

# 下载知识库子文档(使用配置文件中的设置)
./feishu2md wiki-tree

📖 详细用法

命令概览
命令 别名 说明
init i 创建配置文件模板
document doc, d 下载单个文档
folder f, batch 批量下载文件夹
wiki w 下载整个知识库
wiki-tree wt, children 下载子文档树
全局选项
参数 说明 默认值
--config, -c 配置文件路径 .env
--out, -o 输出目录 ./dist
--img-dir 图片目录 img
--title-name, -t 使用标题作为文件名 true
--skip-same, -s 跳过重复文件(MD5检查) true
--force, -f 强制下载 false
--no-img 跳过图片下载 false
--html 使用 HTML 而非 Markdown false
--json 导出 JSON 响应 false

🖼️ 图床功能

支持的图床平台
  • 阿里云 OSS (oss)
  • 腾讯云 COS (cos)
配置图床
阿里云 OSS
IMGBED_ENABLED=true
IMGBED_PLATFORM=oss
IMGBED_SECRET_ID=你的AccessKeyID
IMGBED_SECRET_KEY=你的AccessKeySecret
IMGBED_BUCKET=your-bucket-name
IMGBED_REGION=oss-cn-hangzhou  # 或其他区域
IMGBED_PREFIX_KEY=blog/images/  # 可选,上传路径前缀

区域代码

  • oss-cn-hangzhou - 华东1(杭州)
  • oss-cn-beijing - 华北2(北京)
  • oss-cn-shanghai - 华东2(上海)
  • oss-cn-shenzhen - 华南1(深圳)
腾讯云 COS
IMGBED_ENABLED=true
IMGBED_PLATFORM=cos
IMGBED_SECRET_ID=你的SecretId
IMGBED_SECRET_KEY=你的SecretKey
IMGBED_BUCKET=your-bucket-appid
IMGBED_REGION=ap-guangzhou  # 或其他区域
IMGBED_PREFIX_KEY=blog/images/

区域代码

  • ap-guangzhou - 广州
  • ap-beijing - 北京
  • ap-shanghai - 上海
  • ap-chengdu - 成都
图床功能特性
  • 智能去重 - 相同图片只上传一次
  • 批量上传 - 并发上传提高效率
  • 自动跳过 - 已上传的图片不会重复上传
  • 链接替换 - 自动将 Markdown 中的图片链接替换为图床 URL
  • 本地缓存 - 保留本地图片副本作为备份
使用示例
# 启用图床下载文档
./feishu2md document https://xxx.feishu.cn/docx/abc123

# 输出示例
📤 图床上传已启用: 阿里云OSS
   ├─ 图床: 上传成功 6 张
   ├─ 图片: 命中缓存 0, 新下载 6
✅ 文档标题

# 第二次运行(图片已缓存)
📤 图床上传已启用: 阿里云OSS
   ├─ 图床: 所有图片均已上传(跳过)
   ├─ 图片: 命中缓存 6, 新下载 0
⏭️  跳过重复文件: 文档标题

📚 使用场景

场景 1: 下载单个文档
# 基础用法
./feishu2md document https://xxx.feishu.cn/docx/abc123

# 指定输出目录
./feishu2md document https://xxx.feishu.cn/docx/abc123 --out ./docs

# 启用图床上传
# 在 .env 中配置 IMGBED_ENABLED=true
./feishu2md document https://xxx.feishu.cn/docx/abc123

输出结构

dist/
├── 文档标题.md
└── img/
    ├── image1.png
    └── image2.jpg
场景 2: 批量下载文件夹
./feishu2md folder https://xxx.feishu.cn/drive/folder/abc123

输出结构

dist/
├── 子文件夹1/
│   ├── 文档1.md
│   └── img/
├── 子文件夹2/
│   ├── 文档2.md
│   └── img/
└── 文档3.md
场景 3: 下载知识库
# 下载整个知识库
./feishu2md wiki https://xxx.feishu.cn/wiki/space/abc123
场景 4: 下载知识库子文档树

这是最强大的功能,可以下载知识库中某个节点下的所有子文档。

配置 .env

FEISHU_SPACE_ID=7474915720537620484
FEISHU_FOLDER_TOKEN=https://xxx.feishu.cn/wiki/MekRwTsI9izbqbk

运行

# 使用配置文件中的设置
./feishu2md wiki-tree

# 或指定 URL(会覆盖配置文件)
./feishu2md wiki-tree https://xxx.feishu.cn/wiki/another_node

特性

  • ✅ 递归获取所有层级的子文档
  • ✅ 自动创建文件夹层级结构
  • ✅ 智能跳过有子文档的父级文档
  • ✅ 并发下载(最大10个并发)
  • ✅ 智能去重,避免重复下载

输出结构

dist/
├── 一级目录/
│   ├── 二级文档1.md
│   ├── 子目录/
│   │   ├── 三级文档1.md
│   │   └── img/
│   └── img/
└── 其他文档.md

🔧 飞书 API 配置

1. 创建飞书应用
  1. 访问 飞书开发者后台
  2. 创建企业自建应用
  3. 记录 App IDApp Secret
2. 开通 API 权限

在应用后台开通以下权限:

必需权限

  • drive:drive:readonly - 查看云空间文件
  • drive:file:read - 读取文件内容
  • drive:media:download - 下载媒体文件(重要)
  • wiki:wiki:readonly - 查看知识库
3. 添加协作者权限

对于非公开文档,需要额外配置:

方法一:知识库全局权限

  1. 为应用添加机器人能力并发布
  2. 创建飞书群,将机器人添加到群中
  3. 在知识库设置中,将该群添加为管理员

方法二:单文档权限

  1. 为应用添加云文档能力并发布
  2. 在文档的协作设置中,将应用添加为协作者

❓ 常见问题

Q: 如何获取知识库的 space_id?

A:

  1. 打开知识库
  2. 点击右上角 ⚙️ 设置
  3. 查看浏览器地址栏:https://xxx.feishu.cn/wiki/settings/7474915720537620484
  4. 最后的数字就是 space_id
Q: 图片下载失败显示 403 错误?

A: 按顺序检查:

  1. 确认已开通 drive:media:download 权限
  2. 检查应用是否为文档/知识库的协作者
  3. 参考上方"添加协作者权限"部分
Q: 配置文件在哪里?

A: 默认使用当前目录的 .env 文件,也可以通过 --config 参数指定其他路径:

./feishu2md --config /path/to/custom.env document <url>
Q: 如何跳过图片下载?

A: 使用 --no-img 参数:

./feishu2md document <url> --no-img
Q: 支持哪些文档类型?

A: 仅支持飞书新版文档 (docx),不支持旧版文档 (docs)

Q: 图床上传失败怎么办?

A: 检查以下配置:

  1. 密钥是否正确(SecretID/AccessKeyID 和 SecretKey)
  2. 存储桶名称和区域是否匹配
  3. 存储桶是否有公网访问权限
  4. 查看错误日志获取详细信息

🛠️ 开发

项目结构
feishu2md/
├── cmd/                # 命令行入口
│   ├── main.go        # 主程序
│   ├── download.go    # 下载逻辑
│   └── init.go        # 初始化命令
├── core/              # 核心功能
│   ├── client.go      # 飞书 API 客户端
│   ├── config.go      # 配置管理
│   ├── parser.go      # Markdown 解析器
│   └── envloader.go   # 环境变量加载
├── imgbed/            # 图床模块
│   ├── interface.go   # 接口定义
│   ├── oss.go         # 阿里云 OSS
│   ├── cos.go         # 腾讯云 COS
│   └── uploader.go    # 上传逻辑
├── utils/             # 工具函数
│   ├── common.go
│   └── url.go
└── .env.example       # 配置文件示例
构建
# 开发构建
go build -o feishu2md ./cmd/...

# 生产构建
make build

# 跨平台编译
GOOS=linux GOARCH=amd64 go build -o feishu2md-linux ./cmd/...
GOOS=windows GOARCH=amd64 go build -o feishu2md.exe ./cmd/...
GOOS=darwin GOARCH=arm64 go build -o feishu2md-darwin-arm64 ./cmd/...

📄 开源协议

本项目基于 MIT 协议开源。

🙏 致谢


🌟 贡献

欢迎提交 Issue 和 Pull Request!


如果觉得有用,请给个 ⭐ Star 支持一下!

Made with ❤️ by Perfecto23

Directories

Path Synopsis
Package main 包含将飞书文档转换为Markdown的下载功能 此文件处理核心下载操作,包括单个文档、批量文件夹和知识库
Package main 包含将飞书文档转换为Markdown的下载功能 此文件处理核心下载操作,包括单个文档、批量文件夹和知识库
Package core 为 feishu2md 提供核心配置和客户端功能 此文件处理配置管理,包括从环境变量和CLI参数加载配置
Package core 为 feishu2md 提供核心配置和客户端功能 此文件处理配置管理,包括从环境变量和CLI参数加载配置
Package imgbed - 腾讯云COS图床实现
Package imgbed - 腾讯云COS图床实现

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL