#python-3.x #amazon-s3 #django-views
#python-3.x #amazon-s3 #django-просмотры
Вопрос:
Я получаю 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:
Вам не нужно вызывать .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)