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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:52:11