Telegram Bot上传文件API响应不一致,需获取图片文件名
如何获取Telegram Bot API中上传图片的文件名?
当上传TXT文件时,Telegram Bot API的更新事件会返回文件名,示例响应如下:
{ "update_id": 154781156, "message": { "message_id": 40, "from": { "id": 6718326872, "is_bot": false, "first_name": "Shantanu", "last_name": "Oak", "username": "soak", "language_code": "en" }, "chat": { "id": 6718326872, "first_name": "Shantanu", "last_name": "Oak", "username": "soak", "type": "private" }, "date": 1727147855, "document": { "file_name": "basane.txt", "mime_type": "text/plain", "file_id": "BQACAgUAAxkBAAMoZvIvTyoUOQUwqs8JkQlUWyADDCMAArsQAAJklpFX9DE7pYrYYYk2BA", "file_unique_id": "AgADuxAAAmSWkVc", "file_size": 325405 } } }
但上传图片文件时,API响应仅返回photo数组,不包含原文件名,示例如下:
{ "update_id": 154781157, "message": { "message_id": 41, "from": { "id": 6718326872, "is_bot": false, "first_name": "Shantanu", "last_name": "Oak", "username": "soak", "language_code": "en" }, "chat": { "id": 6718326872, "first_name": "Shantanu", "last_name": "Oak", "username": "soak", "type": "private" }, "date": 1727150140, "photo": [ { "file_id": "AgACAgUAAxkBAAMpZvI4PMcy02obaSa47F9dsjKuleIAAmvBMRtklpFX7-sCRfMcqD8BAAMCAANzAAM2BA", "file_unique_id": "AQADa8ExG2SWkVd4", "file_size": 829, "width": 90, "height": 50 }, { "file_id": "AgACAgUAAxkBAAMpZvI4PMcy02obaSa47F9dsjKuleIAAmvBMRtklpFX7-sCRfMcqD8BAAMCAANtAAM2BA", "file_unique_id": "AQADa8ExG2SWkVdy", "file_size": 10699, "width": 320, "height": 179 }, { "file_id": "AgACAgUAAxkBAAMpZvI4PMcy02obaSa47F9dsjKuleIAAmvBMRtklpFX7-sCRfMcqD8BAAMCAAN4AAM2BA", "file_unique_id": "AQADa8ExG2SWkVd9", "file_size": 42287, "width": 800, "height": 447 }, { "file_id": "AgACAgUAAxkBAAMpZvI4PMcy02obaSa47F9dsjKuleIAAmvBMRtklpFX7-sCRfMcqD8BAAMCAAN5AAM2BA", "file_unique_id": "AQADa8ExG2SWkVd-", "file_size": 81771, "width": 1280, "height": 716 } ] } }
需要获取图片的原文件名,像处理TXT文件那样进行后续处理。
可行解决方案
Telegram Bot API中,直接上传的图片会被归类为photo类型,这类消息默认不携带原文件名。要获取文件名,可参考以下几种方式:
1. 引导用户以「文档」形式发送图片
让用户将图片作为文件(而非直接发送)上传,此时API会返回document字段,其中包含file_name属性,格式和TXT文件的响应一致,能直接拿到原文件名。
2. 调用get_file API获取扩展名(无法拿到完整原文件名)
如果不能要求用户改变发送方式,可以调用get_file接口,传入图片photo数组中分辨率最高的那一项的file_id。接口返回的file_path字段会包含文件扩展名(如.jpg、.png),但无法获取原文件名的前缀部分。
示例Python代码:
import requests BOT_TOKEN = "你的机器人令牌" target_file_id = "AgACAgUAAxkBAAMpZvI4PMcy02obaSa47F9dsjKuleIAAmvBMRtklpFX7-sCRfMcqD8BAAMCAAN5AAM2BA" resp = requests.get(f"https://api.telegram.org/bot{BOT_TOKEN}/getFile?file_id={target_file_id}") file_data = resp.json() # 提取扩展名 file_ext = file_data["result"]["file_path"].split(".")[-1] print(f"图片扩展名:{file_ext}")
3. 让用户在消息中附带文件名
可以在机器人的提示语中,引导用户发送图片时同时附上文件名——要么在图片的**说明文字(caption)**中填写,要么发送图片后单独发送文件名。这样就能从message.caption字段或后续消息中获取文件名。
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

