如何使用 multipart/form-data 通过电报机器人发送照片

how to send photo by telegram bot using multipart/form-data

我有一个电报机器人(在 python 中开发),我想 send/upload 从我计算机中的图像中拍摄照片

所以我应该通过多部分表单数据来完成。

但我不知道该怎么做。我也没有在 Internet 和电报文档中找到有用的资源。

我试图通过以下代码来做到这一点。但这是错误的

data = {'chat_id', chat_id}
files = {'photo': open("./saved/{}.jpg".format(user_id), 'rb')}
status = requests.post("https://api.telegram.org/bot<TOKEN>/sendPhoto", data=data, files=files)

谁能帮帮我?

试试这行代码

status = requests.post("https://api.telegram.org/bot<TOKEN>/sendPhoto?chat_id=" + data['chat_id'], files=files)

您需要在URL中传递chat_id参数:

files = {'photo': open('./saved/{}.jpg'.format(user_id), 'rb')}
status = requests.post('https://api.telegram.org/bot<TOKEN>/sendPhoto?chat_id={}'.format(chat_id), files=files)

DelimitryPyae Hlian Moe 的两个答案都有效,但都没有解决实际问题您提供的代码。

问题是 data 被定义为:

data = {'chat_id', chat_id}

这是一个 set(不是字典),有两个值:字符串 'chat_id'chat_id,而不是

data = {'chat_id' : chat_id}

这是一个字典,有一个键:字符串'chat_id'和存储在[=13=中的对应值].

chat_id 可以定义为 url 的一部分,但类似地,您的原始代码也应该可以正常工作 - 将数据和文件定义为 requests.post() 的参数 - 只要两者都datafiles 变量是字典。

你的问题已经被 aiogram python 框架解决了。

这是完整的例子。只需编辑 TOKEN 和 PHOTO_PATH、运行 代码并向机器人发送 /photo 命令 :)

from aiogram import Bot, Dispatcher, executor
from aiogram.types import InputFile, Message

TOKEN = "YourBotToken"
PHOTO_PATH = "img/photo.png"

bot = Bot(TOKEN)
dp = Dispatcher(bot)


@dp.message_handler(commands=["photo"])
async def your_command_handler(message: Message):
    photo = InputFile(PHOTO_PATH)
    await message.answer_photo(photo)


if __name__ == '__main__':
    executor.start_polling(dp)