Скачивание файла в PyTelegramBotAPI

У меня есть код, который должен принимать файл и скачивать его на сервер

@bot.message_handler(content_types=['document'])
def download_file(message):
    file_name = message.document.file_name
    file_id = message.document.file_name
    file_id_info = bot.get_file(message.document.file_id)
    downloaded_file = bot.download_file(file_id_info.file_path)
    src = file_name
    with open("files/" + src, "wb") as new_file:
        new_file.write(downloaded_file)

Но выпадает такая ошибка

downloaded_file = bot.download_file(file_id_info.file_path) AttributeError: 'AsyncTask' object has no attribute 'file_path'

Как необходимо правильно сохранять файлы?


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

Автор решения: farkon00
link = "images/Название файла" + ".jpg"
with open(link, "wb") as save_file:
    save_file.write(bot.download_file(bot.get_file(message.photo[-1].file_id).file_path))

Вот рабочий вариант кода, сам его использую во всех проектах, в которых он нужен.

→ Ссылка
Автор решения: FreeAngel

Добавьте .wait() к функциям получения файла. Функция не успевает отработать в асинхронном режиме. Вот так:

@bot.message_handler(content_types=["voice"])
def content_voice(message):
    getvoice = bot.get_file(message.voice.file_id).wait() # Раз ожидание выполнения 
    downvoice = bot.download_file(getvoice.file_path).wait() # Два ожидание выполнения 
    with open("voice.ogg", 'wb') as new_file:
        new_file.write(downvoice)
→ Ссылка