Как прочитать ответ изображения s3 как объект - PullRequest
2 голосов
/ 15 апреля 2019

Я получаю ValueError: embedded null byte при попытке преобразовать ответ s3 в b64data

Я пробовал это с urllib.request таким же пакетом ValueError: embedded null byte брошено


s3_response_object = settings.S3_CLIENT.get_object(Bucket=settings.BUCKET_NAME, Key='image_name.png')
object_content = s3_response_object['Body'].read()
with open(object_content, 'rb') as img:
    b64_image = base64.b64encode(img.read())

Здесьдругой код пробовал с предопределенным URL

signed_uri = settings.S3_CLIENT. \
generate_presigned_url(ClientMethod='get_object',
                       Params={'Bucket':settings.BUCKET_NAME,
                       'Key': 'image_name.png'})
contents = urllib.request.urlopen(signed_uri).read()
with open(contents, "rb") as image_file:
    b64_image = base64.b64encode(image_file.read())

оба метода выдают эту ошибку

    with open(object_content, 'rb') as img:
ValueError: embedded null byte

Но используя предварительно подписанный URI, я могу открыть изображение, но изображение требуется как b64data.

1 Ответ

1 голос
/ 16 апреля 2019

Вам не нужно вызывать .read () дважды.тип object_content - байтовый

сделать что-то вроде:

signed_uri = settings.S3_CLIENT. \
generate_presigned_url(ClientMethod='get_object',
                   Params={'Bucket':settings.BUCKET_NAME,
                   'Key': 'image_name.png'})
contents = urllib.request.urlopen(signed_uri).read()
b64_img = base64.b64encode(contents)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...