Aiogram бот не хочет скачивать файлы, полученные от пользователя
Есть задача. Надо скачивать файл txt или doc, который присылает пользователь. Перерыл весь интернет и нашёл два способа.
@dp.message_handler(content_types=['document'])
async def handle_docs_photo(message):
chat_id = message.chat.id
file_info = await bot.get_file(message.document.file_id)
downloaded_file = await bot.download_file(file_info.file_path)
src = 'C:/Python/' + message.document.file_name
with open(src, 'wb') as new_file:
new_file.write(downloaded_file)
await bot.reply_to(message, "Пожалуй, я сохраню это")
Конкретно этот способ создаёт пустой файл в папке и выдает ошибку
TypeError: a bytes-like object is required, not '_io.BytesIO'
Написано на третьем питоне, на компе с виндой и с библиотекой aiogram.
Не знаю как можно справиться с этой проблемой и выполнить казалось бы просто действие.
Ответы (1 шт):
Автор решения: DikiDart
→ Ссылка
Всё заработало, правда в таком виде:
#скачивает файл
@dp.message_handler(content_types=['document'])
async def scan_message(msg: types.Message):
document_id = msg.document.file_id
file_info = await bot.get_file(document_id)
fi = file_info.file_path
name = msg.document.file_name
urllib.request.urlretrieve(f'https://api.telegram.org/file/bot{TOKEN}/{fi}',f'./{name}')
await bot.send_message(msg.from_user.id, 'Файл успешно сохранён')
Файл сохраняется в папке со скриптом с именем и расширением, которым его отправили. Ура!!