# 飞书图片上传问题分析与解决方案 ## 🔍 问题分析 ### 原始问题 通过飞书机器人发布文章时,图片使用了飞书的图床链接,在 WordPress 网站上无法正常显示。 ### 根本原因 1. **飞书图床链接限制**:飞书图片的 URL 需要特定的认证 token 才能访问 2. **跨域访问问题**:WordPress 网站无法直接访问飞书的私有图床 3. **链接过期**:飞书图片链接通常有有效期,过期后无法访问 ## 🛠️ 解决方案 ### 方案概述 **下载 → 上传 → 替换** 三步走策略: ``` 飞书图片 ↓ 1. 通过飞书 API 下载图片到本地 ↓ 2. 上传到 WordPress 媒体库 ↓ 3. 替换文章中的图片链接为 WordPress 链接 ``` ### 具体实现 #### 1. 创建飞书 API 客户端 (`modules/feishu_api.py`) **功能**: - 获取飞书访问令牌(自动刷新) - 下载飞书图片(支持 base64 解码) - 下载飞书文件(支持 base64 解码) - 获取消息中的图片列表 **API 端点**: - 图片下载:`GET /open-apis/im/v1/images/{image_key}` - 文件下载:`GET /open-apis/im/v1/files/{file_key}` #### 2. 更新飞书机器人脚本 (`feishu_bot.py`) **新增功能**: - `_get_message_images()`:获取消息中的所有图片 - `_download_image()`:下载飞书图片到本地 - `_download_file()`:下载飞书文件到本地 **处理流程**: 1. 接收飞书消息 2. 提取消息中的图片 key 3. 调用飞书 API 下载图片到本地 4. 上传图片到 WordPress 媒体库 5. 生成包含 WordPress 图片链接的文章 HTML 6. 发布文章 #### 3. 配置文件更新 (`feishu_config.py`) 已填入飞书应用凭证: ```python FEISHU_APP_ID = 'cli_a938e1c9e0b91cbb' FEISHU_APP_SECRET = 'P4dpF3xVIAizNjnbMCviDeiFDsxI02zo' ``` ## 📁 文件结构 ``` /www/wwwroot/wp-publish/ ├── modules/ │ ├── feishu_api.py # 飞书 API 客户端(新增) │ ├── wp_api.py # WordPress API │ ├── wp_category.py # 分类匹配 │ ├── wp_formatter.py # HTML 格式化 │ ├── wp_image_handler.py # 图片处理 │ ├── wp_logger.py # 日志系统 │ └── wp_parse_docx.py # Word 解析 ├── scripts/ │ ├── wp_publish.py # Word 文档发布 │ └── wp_publish_text.py # 文字 + 图片发布 ├── feishu_bot.py # 飞书机器人(已更新) ├── feishu_config.py # 飞书配置(已更新) ├── webhook_server.py # Webhook 服务器 └── logs/ # 日志目录 ``` ## 🚀 使用方式 ### 方式 1:发送文字 + 图片 在飞书中发送文字和图片,机器人会自动: 1. 下载所有图片 2. 上传到 WordPress 媒体库 3. 发布包含 WordPress 图片链接的文章 ### 方式 2:发送 Word 文档 在飞书中发送 `.docx` 文件,机器人会自动: 1. 下载 Word 文档 2. 解析文档内容 3. 提取并上传图片 4. 发布文章 ### 方式 3:发送指令发布 ``` #标题 文章标题 #分类 ai 文章正文内容 [图片] ``` ## 🔧 技术细节 ### 飞书 API 认证 - 使用 `tenant_access_token` 进行认证 - 自动刷新令牌(有效期 2 小时) - 令牌过期前 5 分钟自动刷新 ### 图片处理流程 ```python # 1. 获取访问令牌 token = feishu_client.get_access_token() # 2. 下载图片 image_path = feishu_client.download_image(image_key) # 3. 上传到 WordPress result = image_handler.upload_image(image_path) # 4. 获取 WordPress 图片 URL wp_image_url = result.get('url') ``` ### 错误处理 - 飞书 API 调用失败:记录错误日志,返回失败消息 - 图片下载失败:跳过该图片,继续处理其他内容 - WordPress 上传失败:记录错误,尝试重新上传 ## 📊 测试验证 ### 测试步骤 1. 在飞书中发送一条包含图片的消息 2. 检查日志确认图片下载成功 3. 检查 WordPress 媒体库确认图片上传成功 4. 访问发布的文章,确认图片正常显示 ### 日志位置 - 飞书机器人日志:`/www/wwwroot/wp-publish/logs/feishu_bot.log` - 飞书 API 日志:`/www/wwwroot/wp-publish/logs/feishu_api.log` - WordPress 发布日志:`/www/wwwroot/wp-publish/logs/publish.log` ## ⚠️ 注意事项 1. **飞书权限**:确保飞书应用已开通 `im:message:receive` 权限 2. **文件大小**:飞书图片和文件下载有大小限制(通常 20MB) 3. **网络环境**:服务器需要能够访问飞书 API(`open.feishu.cn`) 4. **SSL 证书**:WordPress 使用自签名证书,已配置跳过验证 ## 🔄 服务管理 ```bash # 查看服务状态 systemctl status wp-publish # 重启服务 systemctl restart wp-publish # 查看日志 tail -f /www/wwwroot/wp-publish/logs/feishu_bot.log ``` ## 📞 技术支持 如有问题,请查看日志文件获取详细错误信息,或联系技术支持。