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
相关产品推荐
相关产品推荐

