使用python-telegram-bot发送带缩略图媒体报错求助
问题分析与解决方案
咱们一步步拆解你遇到的几个问题:
1. send_video 触发 BrokenPipeError 的核心原因
Telegram Bot API 对 send_video 接口有50MB的文件大小上限,你要发送的视频是52MB,已经超出了这个限制——这就是哪怕设置超大timeout也报错的根本原因,API本身会拒绝接收超过阈值的视频文件。
另外你提到之前40MB无缩略图视频正常,但缩略图不显示,这里你的代码有个小疏漏:thumb=open('picture.jpg')没有添加二进制读取模式'rb',应该写成thumb=open('picture.jpg', 'rb')。文本模式打开的图片文件无法被Telegram识别,自然显示不出来。
2. send_document 出现 TypeError 的问题
你的代码存在两处错误:
- 不需要手动构造
files字典,send_document的document参数可以直接接收二进制模式打开的文件对象,手动构造的字典格式不符合python-telegram-bot的预期,才会触发JSON序列化失败; thumb=('picture.jpeg')的写法没有意义(括号无实际作用,本质就是字符串),规范的做法是传递二进制模式打开的文件对象,或者直接传文件路径字符串(推荐前者)。
修正后的send_document代码示例
from flask import Flask, request import telegram bot_token = "12345678:ABCDEEFGHIjksdfsusk" bot = telegram.Bot(token=bot_token) # 用with语句管理文件句柄,避免资源泄漏 with open('k 2.mkv', 'rb') as video_file, open('picture.jpeg', 'rb') as thumb_file: bot.send_document( chat_id='-123456789', document=video_file, thumb=thumb_file, timeout=1000000 )
额外注意事项
- 缩略图除了满足大小≤200KB、尺寸≤320px的要求,还要确保格式为JPG/PNG(Telegram优先推荐JPG);
- 当文件超过50MB时,必须使用
send_document接口(该接口支持最大2GB文件,只要你的Bot服务器带宽允许); - 若需要更稳定的大文件上传,可以尝试python-telegram-bot提供的
InputFile类,不过常规场景下直接传递文件对象就足够。
内容的提问来源于stack exchange,提问作者Kit Walker
相关产品推荐
相关产品推荐

