Как сохранить на сервер альбом фотографий от юзера Python Aiogram

Всем привет! Столкнулся с проблемой: Как сохранить все фотографии отправленные боту на сервере Пробовал способ с этого решения Но способ оказался не рабочим. Подскажите пожалуйста как решить проблему


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

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

Все отправленные ранее изображения никак нельзя вывести (если память мне не изменяет), но можно сохранять отправленные юзером изображения.

Чтоб сохранить изображение на сервере Telegram - его сначала нужно загрузить, и затем получить его идентификатор. Telegram высылает для одного изображения несколько идентификаторов, последний имеет наибольшее разрешение. Идентификатор нужно где-то хранить, его можно записать, например, в базу данных. Как получить этот идентификатор, привожу ниже:

from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from aiogram import Bot

bot = Bot('token')
dp = Dispatcher(bot)


@dp.message_handler(content_types=["photo"])
async def get_photo(message):
    file_id = message.photo[-1].file_id
    print(file_id) # этот идентификатор нужно где-то сохранить
    await bot.send_photo(message.chat.id, file_id)

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

Это распечатает идентификатор, и сразу же отправит его вам уже из сервера Telegram

Если же нужно скачать именно на локальный компьютер, то вот код попроще:

from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from aiogram import Bot

bot = Bot('token')
dp = Dispatcher(bot)


@dp.message_handler(content_types=["photo"])
async def get_photo(message):
    file_info = await bot.get_file(message.photo[-1].file_id)
    await message.photo[-1].download(file_info.file_path.split('photos/')[1]) # ++


if __name__ == '__main__':
    executor.start_polling(dp)
→ Ссылка