You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:04:20