首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用S3从Amazon下载JPG文件到内存中?

如何使用S3从Amazon下载JPG文件到内存中?
EN

Stack Overflow用户
提问于 2021-08-19 11:50:13
回答 2查看 924关注 0票数 0

我很难用S3从Amazon下载JPG文件,我想将这段代码加载到Heroku,所以我需要将图像加载到内存中,而不是磁盘上。

我使用的代码是:

代码语言:javascript
运行
复制
import boto3

s3 = boto3.client(
        "s3",
        aws_access_key_id = access_key,
        aws_secret_access_key = access_secret
    )

s3.upload_fileobj(image_conv, bucket, Key = "image_3.jpg")

new_obj = s3.get_object(Bucket=bucket, Key="image_3.jpg")

image_dl = new_obj['Body'].read()

Image.open(image_dl)

我收到了错误消息:

代码语言:javascript
运行
复制
File ..... line 2968, in open
    fp = builtins.open(filename, "rb")
ValueError: embedded null byte

调用image_dl将返回我假设为字节的大量长列表,其中一个小部分如下所示:

代码语言:javascript
运行
复制
f\xbc\xdc\x8f\xfe\xb5q\xda}\xed\xcb\xdcD\xab\xe6o\x1c;\xb7\xa0\xf5\xf5\xae\xa6)\xbe\xee\xe6\xc3vn\xdfLVW:\x96\xa8\xa3}\xa4\xd8\xea\x8f*\x89\xd7\xcc\xe8\xf0\xca\xb9\x0b\xf4\x1f\xe7\x15\x93\x0f\x83ty$h\xa6\x83\xc8\x99z<K\xc3c\xd4w\xae\xa4\xc2\xfb\xcb\xee\xe0

上传到S3之前的图像返回了下面的内容,这就是我试图将图像返回到的格式。有人能帮我知道我哪里出问题了吗?

代码语言:javascript
运行
复制
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1440x1440 at 0x7F2BB4005EB0>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-19 20:38:10

枕头的图像类要么需要一个文件名来打开,要么需要一个类似文件的对象来调用read。因为您没有文件名,所以需要提供一个流。最简单的方法是使用BytesIO将字节数组转换为strem:

代码语言:javascript
运行
复制
import boto3
from PIL import Image
from io import BytesIO

bucket = "--example-bucket--"

s3 = boto3.client("s3")
with open("image.jpg", "rb") as image_conv:
    s3.upload_fileobj(image_conv, bucket, Key="image_3.jpg")
new_obj = s3.get_object(Bucket=bucket, Key="image_3.jpg")
image_dl = new_obj['Body'].read()
image = Image.open(BytesIO(image_dl))

print(image.width, image.height)
票数 2
EN

Stack Overflow用户

发布于 2021-08-19 11:57:36

首先尝试将原始数据加载到BytesIO容器中:

代码语言:javascript
运行
复制
from io import StringIO
from PIL import Image

file_stream = StringIO()
s3.download_fileobj(bucket, "image_3.jpg", file_stream)
img = Image.open(file_stream)

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.download_fileobj

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68847323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档