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

Telegram机器人Webhook接收照片:如何从变量获取MIME类型与扩展名?

获取Telegram机器人接收照片的扩展名与MIME类型

方法一:直接从Telegram Bot API的文件元数据提取

当Webhook收到照片时,Telegram返回的PhotoSize数组中每个对象都带有file_id。调用getFile接口获取文件详情后,可从返回的file_path直接提取扩展名,再映射对应的MIME类型。

示例代码(以Python的python-telegram-bot库为例):

from telegram import Bot

async def get_file_info(bot: Bot, file_id: str):
    file = await bot.get_file(file_id)
    # 从file_path切割出扩展名
    file_ext = file.file_path.split('.')[-1].lower()
    # 映射常见图片MIME类型
    mime_map = {
        'jpg': 'image/jpeg',
        'png': 'image/png',
        'webp': 'image/webp',
        'gif': 'image/gif'
    }
    mime_type = mime_map.get(file_ext, 'image/octet-stream')
    return file_ext, mime_type

这种方式最可靠,因为Telegram服务器会保留原文件的格式信息,file_path里的扩展名是准确的。

方法二:从本地字节流分析(备用方案)

如果已经将照片下载到字节变量中,可通过文件头的「魔术数字」判断格式,无需依赖API。

示例代码:

def get_info_from_bytes(file_bytes: bytes):
    # 匹配常见图片格式的文件头特征
    format_map = {
        b'\xff\xd8\xff': ('jpg', 'image/jpeg'),
        b'\x89PNG\r\n\x1a\n': ('png', 'image/png'),
        b'RIFF\x00\x00\x00\x00WEBP': ('webp', 'image/webp'),
        b'GIF87a': ('gif', 'image/gif'),
        b'GIF89a': ('gif', 'image/gif')
    }
    for magic, (ext, mime) in format_map.items():
        if file_bytes.startswith(magic):
            return ext, mime
    # 匹配失败返回默认值
    return None, 'image/octet-stream'

只需将存储照片的字节变量传入该函数,即可得到对应的扩展名和MIME类型。

补充说明

  • 优先使用方法一,无需额外解析文件内容,效率更高且准确
  • 方法二适合离线处理或API调用受限的场景,覆盖Telegram常见的图片格式即可满足需求

内容的提问来源于stack exchange,提问作者LeonidMew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:22:35