Python實現(xiàn)文檔自動上傳至飛書云盤
在完成文章分析后,需要將生成的報告自動備份到飛書云盤,避免手動傳輸?shù)姆爆崱?/p>
整體架構(gòu)
上傳流程的架構(gòu)設(shè)計:

核心流程
整個上傳過程分為四個步驟:
步驟 1:初始化
- 輸入:環(huán)境變量(APP_ID、APP_SECRET、FEISHU_FOLDER_TOKEN)
- 處理:
FeishuUploader.__init__()從環(huán)境變量讀取憑證 - 輸出:配置完成的上傳器實例
步驟 2:身份認(rèn)證
- 輸入:APP_ID + APP_SECRET
- 處理:調(diào)用
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:結(jié)果處理
- 輸入:API 響應(yīng)
- 處理:檢查響應(yīng)碼,記錄成功/失敗日志
- 輸出:布爾結(jié)果(True/False)
關(guān)鍵代碼實現(xiàn)
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 發(fā)送到飛書認(rèn)證接口,從響應(yīng)中提取訪問憑證。
文件上傳
def upload_file(self, file_path: Path) -> bool:
token = self._get_tenant_access_token()
# 使用 MultipartEncoder 構(gòu)建表單
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)
邏輯說明:
- 驗證文件存在且 folder_token 已配置
- 獲取身份認(rèn)證憑證
- 構(gòu)建包含文件元數(shù)據(jù)的表單
- 流式上傳到飛書云盤 API
上傳觸發(fā)點
在 main.py 中,分析完成后自動觸發(fā)上傳:
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("自動上傳飛書失敗。")
飛書平臺配置詳解
這是整個流程中最容易出錯的環(huán)節(jié)。很多開發(fā)者代碼寫好了,卻在權(quán)限配置上卡住。
前置條件
- 擁有飛書賬號,且具有管理員權(quán)限(用于審批應(yīng)用)
- 飛書云盤中已有目標(biāo)文件夾(用于存放上傳的報告)
配置流程概覽

階段一:創(chuàng)建飛書應(yīng)用
進(jìn)入開發(fā)者后臺
- 打開 飛書開放平臺
- 使用飛書賬號登錄
- 點擊「創(chuàng)建企業(yè)自建應(yīng)用」
填寫應(yīng)用信息
| 字段 | 說明 |
|---|---|
| 應(yīng)用名稱 | 應(yīng)用的顯示名稱 |
| 應(yīng)用描述 | 功能簡介 |
| 應(yīng)用圖標(biāo) | 上傳圖標(biāo)(可選) |
填寫完成后點擊「創(chuàng)建」。
記錄應(yīng)用憑證
創(chuàng)建成功后,進(jìn)入「憑證與基礎(chǔ)信息」頁面:
| 憑證 | 說明 | 特征 |
|---|---|---|
App ID | 應(yīng)用唯一標(biāo)識 | 以 cli_ 開頭 |
App Secret | 應(yīng)用密鑰 | 點擊查看 |
重要:請妥善保管這些憑證,后續(xù) API 認(rèn)證需要使用。
階段二:配置 API 權(quán)限
進(jìn)入權(quán)限管理
- 在應(yīng)用管理頁面,進(jìn)入「開發(fā)配置」→「權(quán)限管理」
- 點擊「開通權(quán)限」按鈕
搜索并添加所需權(quán)限
在「API 權(quán)限」標(biāo)簽頁下,搜索并添加以下權(quán)限:
| 權(quán)限名稱 | 權(quán)限標(biāo)識 | 類型 | 用途 |
|---|---|---|---|
| 上傳、下載文件到云空間 | drive:file:upload | 租戶級 | 上傳文件到云盤 |
| 查看、評論、編輯和管理云空間中所有文件 | drive:file | 租戶級 | 完整文件訪問(備選) |
推薦:使用 drive:file:upload,遵循最小權(quán)限原則。
階段三:發(fā)布應(yīng)用
創(chuàng)建版本
進(jìn)入「應(yīng)用發(fā)布」→「版本管理與發(fā)布」
點擊「創(chuàng)建版本」
填寫版本信息:
| 字段 | 值 |
|---|---|
| 版本號 | 1.0.0 |
| 更新說明 | 初始版本,支持云盤文件上傳功能 |
| 可用范圍 |
點擊「保存」
階段四:配置文件夾訪問權(quán)限
還需要配置文件夾權(quán)限,應(yīng)用才能上傳文件。
啟用機(jī)器人能力
- 返回「開發(fā)者后臺」→ 選擇你的應(yīng)用
- 進(jìn)入「應(yīng)用功能」→「機(jī)器人」
- 點擊「啟用機(jī)器人」
- 配置機(jī)器人信息(名稱、描述、頭像)
- 發(fā)布新版本以激活機(jī)器人功能
添加應(yīng)用為文件夾協(xié)作者
有兩種方法可以授權(quán):
方法 A:直接添加應(yīng)用到文件夾
- 在瀏覽器或客戶端打開飛書云盤
- 進(jìn)入目標(biāo)文件夾
- 點擊右上角「 ... 」→「更多」→「添加文檔應(yīng)用」
- 搜索你的應(yīng)用名稱
- 選擇應(yīng)用,設(shè)置權(quán)限為「可編輯」
- 點擊「確認(rèn)」
前提條件:應(yīng)用必須已開通至少一個云文檔 API 權(quán)限并已發(fā)布。
方法 B:通過群組添加應(yīng)用
- 在飛書中創(chuàng)建一個新群組
- 將應(yīng)用作為「機(jī)器人」添加到群組
- 打開目標(biāo)文件夾 → 點擊「分享」
- 邀請該群組作為協(xié)作者,權(quán)限設(shè)為「可編輯」
獲取文件夾 Token
1.在飛書云盤中打開目標(biāo)文件夾
2.從瀏覽器地址欄復(fù)制 URL:https://feishu.cn/drive/folder/fldcnXXXXXXXXXXXX
3. 提取 folder_token(/folder/ 后面的部分):
folder_token = fldcnXXXXXXXXXXXX
階段五:配置環(huán)境變量
在項目根目錄創(chuàng)建或更新 .env 文件:
# 飛書配置 APP_ID=cli_xxxxxxxxxxxxx APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx FEISHU_FOLDER_TOKEN=fldcnXXXXXXXXXXXX
| 變量 | 來源 | 示例 |
|---|---|---|
APP_ID | 開發(fā)者后臺 → 憑證與基礎(chǔ)信息 | cli_a1b2c3d4e5f6g7h8 |
APP_SECRET | 開發(fā)者后臺 → 憑證與基礎(chǔ)信息 | aB1cD2eF3gH4iJ5kL6mN7oP8 |
FEISHU_FOLDER_TOKEN | 飛書云盤 URL | fldcnAbCdEfGhIjKlMnO |
常見問題排查
| 錯誤碼 | 描述 | 解決方案 |
|---|---|---|
1061004 | 權(quán)限不足 | 將應(yīng)用添加為文件夾協(xié)作者,權(quán)限設(shè)為可編輯 |
1061073 | 未開通權(quán)限 | 在開發(fā)者后臺申請 drive:file:upload 權(quán)限 |
1061044 | 文件夾不存在 | 檢查 FEISHU_FOLDER_TOKEN 是否正確 |
99991663 | 應(yīng)用未找到 | 確認(rèn)應(yīng)用已發(fā)布且機(jī)器人已啟用 |
以上就是Python實現(xiàn)文檔自動上傳至飛書云盤的詳細(xì)內(nèi)容,更多關(guān)于Python文檔上傳飛書云盤的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python使用asyncio實現(xiàn)異步操作的示例
本文主要介紹了Python使用asyncio實現(xiàn)異步操作的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Python命令行參數(shù)解析工具 docopt 安裝和應(yīng)用過程詳解
這篇文章主要介紹了Python命令行參數(shù)解析工具 docopt 安裝和應(yīng)用過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09
Django中的DateTimeField和DateField實現(xiàn)
這篇文章主要介紹了Django中的DateTimeField和DateField實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
對numpy中的transpose和swapaxes函數(shù)詳解
今天小編就為大家分享一篇對numpy中的transpose和swapaxes函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Python使用pickle模塊存儲數(shù)據(jù)報錯解決示例代碼
這篇文章主要介紹了Python使用pickle模塊存儲數(shù)據(jù)報錯解決示例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01

