• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Ошибка при скачивании фотографии, которую отправил пользователь боту в телеграмм.

Ali_Pythonist

Member
21.02.2024
8
0
BIT
76
Привет, пытаюсь скачать фото которое отправил пользователь, но получаю такую ошибку TypeError: a bytes-like object is required, not '_io.BytesIO'. Как исправить код? Помогите пожалуйста, код ниже.

Python:
import asyncio
import os
from io import BytesIO
from aiogram import Bot, Dispatcher, F
from aiogram.filters import Command
from aiogram.types import Message
from testBot.token_bot import token


bot = Bot(token=token)
dp = Dispatcher()
by = BytesIO()

@dp.message(Command('start'))
async def bot_start(message: Message):
    await message.answer(text='привет.')

@dp.message(F.photo)
async def bot_photo(message: Message):
    photo_id = message.photo[-1].file_id
    print(type(photo_id))
    file_photo = await bot.get_file(photo_id)
    print(type(file_photo))
    file_name, file_extension = os.path.splitext(file_photo.file_path)
    print(type(file_name), type(file_extension))
    download_file_photo = await bot.download_file(file_photo.file_path)
    print(type(download_file_photo))
    src = 'photo/' + photo_id + file_extension
    with open(src, 'wb') as new_file:
        new_file.write(download_file_photo)


async def main():
    await dp.start_polling(bot)
asyncio.run(main())
 

f22

Codeby Academy
Gold Team
05.05.2019
1 837
225
BIT
995
Попробуйте записать байты таким образом
Python:
new_file.write(download_file_photo.getbuffer())
он из _io.BytesIO сделает байтовую строку
 

Exited3n

Red Team
10.05.2022
679
217
BIT
431
Привет, пытаюсь скачать фото которое отправил пользователь, но получаю такую ошибку TypeError: a bytes-like object is required, not '_io.BytesIO'. Как исправить код? Помогите пожалуйста, код ниже.

Python:
import asyncio
import os
from io import BytesIO
from aiogram import Bot, Dispatcher, F
from aiogram.filters import Command
from aiogram.types import Message
from testBot.token_bot import token


bot = Bot(token=token)
dp = Dispatcher()
by = BytesIO()

@dp.message(Command('start'))
async def bot_start(message: Message):
    await message.answer(text='привет.')

@dp.message(F.photo)
async def bot_photo(message: Message):
    photo_id = message.photo[-1].file_id
    print(type(photo_id))
    file_photo = await bot.get_file(photo_id)
    print(type(file_photo))
    file_name, file_extension = os.path.splitext(file_photo.file_path)
    print(type(file_name), type(file_extension))
    download_file_photo = await bot.download_file(file_photo.file_path)
    print(type(download_file_photo))
    src = 'photo/' + photo_id + file_extension
    with open(src, 'wb') as new_file:
        new_file.write(download_file_photo)


async def main():
    await dp.start_polling(bot)
asyncio.run(main())
У аиограмма для этого есть все что нужно
FSInputFile
Например так:

Код:
from aiogram.types import FSInputFile

file = FSInputFile("data/file.png")
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!