Python实现文档自动上传至飞书云盘

 更新时间:2026年05月06日 08:31:19   作者:alwaysrun  
本文详细介绍如何实现Python分析报告自动上传到飞书云盘的功能,涵盖技术架构,核心代码实现以及飞书平台配置的全流程,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

在完成文章分析后,需要将生成的报告自动备份到飞书云盘,避免手动传输的繁琐。

整体架构

上传流程的架构设计:

核心流程

整个上传过程分为四个步骤:

步骤 1:初始化

  • 输入:环境变量(APP_ID、APP_SECRET、FEISHU_FOLDER_TOKEN)
  • 处理FeishuUploader.__init__() 从环境变量读取凭证
  • 输出:配置完成的上传器实例

步骤 2:身份认证

  • 输入:APP_ID + APP_SECRET
  • 处理:调用 POST /auth/v3/tenant_access_token/internal
  • 输出tenant_access_token(有效期 2 小时)

步骤 3:文件上传

  • 输入:文件路径 + folder_token + tenant_access_token
  • 处理:使用 MultipartEncoder 流式上传到 POST /drive/v1/files/upload_all
  • 输出:成功时返回 file_token

步骤 4:结果处理

  • 输入:API 响应
  • 处理:检查响应码,记录成功/失败日志
  • 输出:布尔结果(True/False)

关键代码实现

FeishuUploader 类

这个类封装了所有与飞书 API 的交互逻辑。

获取访问凭证

def _get_tenant_access_token(self) -> Optional[str]:
    url = f"{self.BASE_URL}/auth/v3/tenant_access_token/internal"
    payload = {"app_id": self.app_id, "app_secret": self.app_secret}
    response = requests.post(url, json=payload, timeout=10)
    # 成功时返回 tenant_access_token

逻辑说明:将 App ID 和 App Secret 发送到飞书认证接口,从响应中提取访问凭证。

文件上传

def upload_file(self, file_path: Path) -> bool:
    token = self._get_tenant_access_token()
    # 使用 MultipartEncoder 构建表单
    form = {
        'file_name': file_name,
        'parent_type': 'explorer',
        'parent_node': self.folder_token,
        'size': str(file_size),
        'file': (file_name, f)
    }
    multi_form = MultipartEncoder(form)
    response = requests.post(url, headers=headers, data=multi_form, timeout=60)

逻辑说明

  1. 验证文件存在且 folder_token 已配置
  2. 获取身份认证凭证
  3. 构建包含文件元数据的表单
  4. 流式上传到飞书云盘 API

上传触发点

main.py 中,分析完成后自动触发上传:

if results and any(r.success for r in results):
    report_path = reporter.generate_summaries_report(results, grouped_urls)
    logger.info("汇总分析成功,正在上传报告...")
    uploader = FeishuUploader()
    if uploader.upload_file(report_path):
        logger.info("自动上传飞书成功。")
    else:
        logger.error("自动上传飞书失败。")

飞书平台配置详解

这是整个流程中最容易出错的环节。很多开发者代码写好了,却在权限配置上卡住。

前置条件

  1. 拥有飞书账号,且具有管理员权限(用于审批应用)
  2. 飞书云盘中已有目标文件夹(用于存放上传的报告)

配置流程概览

阶段一:创建飞书应用

进入开发者后台

  • 打开 飞书开放平台
  • 使用飞书账号登录
  • 点击「创建企业自建应用

填写应用信息

字段说明
应用名称应用的显示名称
应用描述功能简介
应用图标上传图标(可选)

填写完成后点击「创建」。

记录应用凭证

创建成功后,进入「凭证与基础信息」页面:

凭证说明特征
App ID应用唯一标识cli_ 开头
App Secret应用密钥点击查看

重要:请妥善保管这些凭证,后续 API 认证需要使用。

阶段二:配置 API 权限

进入权限管理

  1. 在应用管理页面,进入「开发配置」→「权限管理
  2. 点击「开通权限」按钮

搜索并添加所需权限

在「API 权限」标签页下,搜索并添加以下权限:

权限名称权限标识类型用途
上传、下载文件到云空间drive:file:upload租户级上传文件到云盘
查看、评论、编辑和管理云空间中所有文件drive:file租户级完整文件访问(备选)

推荐:使用 drive:file:upload,遵循最小权限原则。

阶段三:发布应用

创建版本

进入「应用发布」→「版本管理与发布

点击「创建版本

填写版本信息:

字段
版本号1.0.0
更新说明初始版本,支持云盘文件上传功能
可用范围

点击「保存

阶段四:配置文件夹访问权限

还需要配置文件夹权限,应用才能上传文件。

启用机器人能力

  1. 返回「开发者后台」→ 选择你的应用
  2. 进入「应用功能」→「机器人
  3. 点击「启用机器人
  4. 配置机器人信息(名称、描述、头像)
  5. 发布新版本以激活机器人功能

添加应用为文件夹协作者

有两种方法可以授权:

方法 A:直接添加应用到文件夹

  1. 在浏览器或客户端打开飞书云盘
  2. 进入目标文件夹
  3. 点击右上角「 ... 」→「更多」→「添加文档应用
  4. 搜索你的应用名称
  5. 选择应用,设置权限为「可编辑
  6. 点击「确认

前提条件:应用必须已开通至少一个云文档 API 权限并已发布。

方法 B:通过群组添加应用

  1. 在飞书中创建一个新群组
  2. 将应用作为「机器人」添加到群组
  3. 打开目标文件夹 → 点击「分享
  4. 邀请该群组作为协作者,权限设为「可编辑

获取文件夹 Token

1.在飞书云盘中打开目标文件夹

2.从浏览器地址栏复制 URL:https://feishu.cn/drive/folder/fldcnXXXXXXXXXXXX

3. 提取 folder_token/folder/ 后面的部分):

folder_token = fldcnXXXXXXXXXXXX

阶段五:配置环境变量

在项目根目录创建或更新 .env 文件:

# 飞书配置
APP_ID=cli_xxxxxxxxxxxxx
APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
FEISHU_FOLDER_TOKEN=fldcnXXXXXXXXXXXX
变量来源示例
APP_ID开发者后台 → 凭证与基础信息cli_a1b2c3d4e5f6g7h8
APP_SECRET开发者后台 → 凭证与基础信息aB1cD2eF3gH4iJ5kL6mN7oP8
FEISHU_FOLDER_TOKEN飞书云盘 URLfldcnAbCdEfGhIjKlMnO

常见问题排查

错误码描述解决方案
1061004权限不足将应用添加为文件夹协作者,权限设为可编辑
1061073未开通权限在开发者后台申请 drive:file:upload 权限
1061044文件夹不存在检查 FEISHU_FOLDER_TOKEN 是否正确
99991663应用未找到确认应用已发布且机器人已启用

以上就是Python实现文档自动上传至飞书云盘的详细内容,更多关于Python文档上传飞书云盘的资料请关注脚本之家其它相关文章!

相关文章

  • 教你使用Python的pygame模块实现拼图游戏

    教你使用Python的pygame模块实现拼图游戏

    pygame模块是一个可以跨平台的模块,其设计目的就是为电子游戏而设计,能够支持图片和声音,下面这篇文章主要给给大家介绍了关于使用Python的pygame模块实现拼图游戏的相关资料,需要的朋友可以参考下
    2022-07-07
  • Python数据分析之 Matplotlib 饼图绘制

    Python数据分析之 Matplotlib 饼图绘制

    这篇文章主要介绍了Python数据分析之 Matplotlib 饼图绘制,文章基于python的相关资料展开详细的饼图绘制,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 在python3.9下如何安装scrapy的方法

    在python3.9下如何安装scrapy的方法

    这篇文章主要介绍了在python3.9下如何安装scrapy的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • python批量修改图片尺寸,并保存指定路径的实现方法

    python批量修改图片尺寸,并保存指定路径的实现方法

    今天小编就为大家分享一篇python批量修改图片尺寸,并保存指定路径的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python切片及sys.argv[]用法详解

    python切片及sys.argv[]用法详解

    Sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始。下面通过实例代码给大家介绍python切片及sys.argv[]用法,需要的朋友参考下吧
    2018-05-05
  • Python+Pygame编写一个Pong游戏

    Python+Pygame编写一个Pong游戏

    Pong游戏模拟了两个打乒乓球的人,就是在两条线中间有一个点在动,操纵器就是一个摇杆上有一个按钮的那种。本文就来用Python中的Pygame库编写一个Pong小游戏
    2023-01-01
  • Python中匹配模糊的字符串问题分析

    Python中匹配模糊的字符串问题分析

    这篇文章主要介绍了Python中匹配模糊的字符串的过程,我们将学习如何使用process 模块,该模块允许我们在模糊字符串逻辑的帮助下有效地匹配或提取字符串,需要的朋友可以参考下
    2023-09-09
  • 使用Python搭建虚拟环境的配置方法

    使用Python搭建虚拟环境的配置方法

    python 的虚拟环境可以为一个 python 项目提供独立的解释环境、依赖包等资源,既能够很好的隔离不同项目使用不同 python 版本带来的冲突,而且还能方便项目的发布。这篇文章主要介绍了使用Python虚拟环境,需要的朋友可以参考下
    2018-02-02
  • Python安装模块的常见问题及解决方法

    Python安装模块的常见问题及解决方法

    下面小编就为大家分享一篇Python安装模块的常见问题及解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • 基于Python开发一个专业级USB安全弹出工具

    基于Python开发一个专业级USB安全弹出工具

    在日常使用计算机时,我们经常会遇到"该设备正在使用中,无法安全移除"的烦人提示,所以我们就来使用使用Python开发一个专业级USB安全弹出工具吧
    2025-06-06

最新评论