Отправка медиафайлов ботом ТГ

Занялся изучением процесса написания ботов в ТГ. Пишу пока самое простой, просто эхобот который отвечает на сообщения. Сделал кнопочки меню при нажатии на которые присылается разный текст или открываются подменю и спокнулся на таком вопросе. Как сделать так, что бы бот кроме текста отправлял изображение.

    async def text_button (message: types.Message):
    await message.answer('подменю', reply_markup=keyboard2)
    await message.answer_photo(InputFile('media/1.jpg'))

пишет

await message.answer_photo(InputFile('media/1.jpg')) 

TypeError: Can't instantiate abstract class InputFile with abstract method read

Если

async def text_button (message: types.Message):
    await message.answer('подменю', reply_markup=keyboard2)
    await message.answer_photo('media/1.jpg') 

то требует ссылку на фото в интернете.

  await Bot.send_photo(chat_id=message.from_user.id, photo=open('media/1.jpg', 'rb'))

не видит файл

FileNotFoundError: [Errno 2] No such file or directory: 'media/1.jpg'

А как сделать что бы он брал фото из папки media? Что я не так делаю? Куда в интернете не смотрел, все учат отправлять текст, а вот с картинками не могу разобраться...


Ответы (1 шт):

Автор решения: Fulani

Возможные причины: **Неправильная передача данных через BytesIO. Ограничения на размер изображения. **Проблемы с внутренней реализацией сетевых запросов в aiogram (например, сессия может быть завершена или возникли внутренние проблемы с подключением). Возможное решение: Перейти на сохранение изображения во временный файл. Это позволит точно убедиться, что проблема не связана с использованием BytesIO, так как временный файл точно поддерживается Telegram API.

Использовать явное управление сессиями для сетевых запросов в aiogram.

Решение: сохранение во временный файл и его передача: Попробуй сохранить изображение во временный файл и передать его через путь к файлу.

→ Ссылка