python-3.x - 如何将 s3 图像响应读取为对象

标签 python-3.x amazon-s3 django-views

我在尝试将 s3 响应转换为 b64data 时收到 ValueError: embedded null byte

我用 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。

最佳答案

您不必调用 .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)

关于python-3.x - 如何将 s3 图像响应读取为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55689422/

相关文章:

python-3.x - 为什么生成的 SVG 图像不如相应的 PNG 图像丰富

Python优化形状重叠检测

java - 在 EC2 实例上运行时,Amazon S3 不返回响应或抛出错误

python - 为 Django 存档页面选择不同的年份和月份

django - 对 FormView 中的 get_form_kwargs 感到好奇

Django 导入错误 : No module named models

python - 获取数据类型为 <class Map> 而不是 int

python - 在python中创建具有一定宽度边框的图像

node.js - 上传时图像方向错误 - Amazon S3

php - 从 php 执行 AWS CLI 命令导致无法找到凭证