@Ninzalo

Как загрузить фото из сообщения в буфер?

Здравствуйте, мне необходимо загрузить файл, который я получаю из сообщения с помощью библиотеки vkbottle, с серверов ВК в io.BytesIO() или просто получить bytes, но никак не могу найти хорошего способа сделать это. Есть ли у самой vkbottle метод загрузки фото и документов в байты?
Подойдет ли использование requests для этой цели?
img_data = requests.get(message_file.photo.sizes[-5].url).content

Также есть ли смысл реализовывать что-то такое?

КОД
async def handle_message_event(self, event: Message):
    payload = None
    if event.payload:
        payload = json.loads(event.payload)
    files = []
    for message_file in event.attachments:
        file_in_io = BytesIO()
        if message_file.doc != None:
            print(f"Doc: {message_file.doc.url}")
            """
            функция для загрузки документа в io.BytesIO()

            """
            files.append(file_in_io)
        if message_file.photo != None:
            print(f"Photo: {message_file.photo.sizes[-5].url}")
            """
            функция для загрузки фото в io.BytesIO()

            """
            files.append(file_in_io)

Note: в последствии мне нужно будет отправить этот файл, документацию по отправке нашел, по идее должно работать через метод .get_bytes_io(data) (если нет, поправьте) (ссылка на документацию)

UPD:
Вот что получилось у меня, подходит ли такое решение? (работает, но в поиске более лаконичного)
Код
async def download_file(
    url: str, _session: aiohttp.ClientSession | None = None
) -> bytes:
    if _session != None:
        session = _session
    else:
        session = aiohttp.ClientSession()
    async with session:
        async with asyncio.BoundedSemaphore(5):
            async with session.get(url) as resp:
                if resp.status == 200:
                    return await resp.read()
                else:
                    await asyncio.sleep(1)
                    return await download_file(url=url, _session=session)
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы