gpt4 book ai didi

Python Flask-如何在将图像上传到 Amazon s3 之前读取图像的大小

转载 作者:太空狗 更新时间:2023-10-30 02:38:39 25 4
gpt4 key购买 nike

如果您对 Python FlaskBoto3Pillow(又名 PIL)。

我正在尝试接收来自客户端的传入图像(只允许 .jpg.jpeg.tif)和我想在使用 Boto3 将图像上传到 Amazon S3 之前读取图像的尺寸。

代码相当简单:

file = request.files['file'] 
# produces an instance of FileStorage

asset = models.Asset(file, AssetType.profile_img, donor.id)
# a model managed by the ORM

img = Image.open(BytesIO(file.stream.read()))
# produces a PIL Image object

size = img.size
# read the size of the Image object

asset.width = size[0]
asset.height = size[1]
# set the size to the ORM

response = s3.Object('my-bucket', asset.s3_key()).put(Body=file)
# upload to S3

问题是,我可以 (A) 读取图像或 (B) 上传到 s3,但我不能两者都做。从字面上看,注释掉一个或另一个会产生所需的操作,但不会将两者结合起来。

我已将范围缩小到上传。我相信 file.strea.read() 操作会导致 Boto3 上传出现问题,但我无法弄清楚。可以吗?

提前致谢。

最佳答案

您很接近 - 更改 S3 的字节源应该就可以了。大致是这样的:

file = request.files['file'] 
# produces an instance of FileStorage

asset = models.Asset(file, AssetType.profile_img, donor.id)
# a model managed by the ORM

image_bytes = BytesIO(file.stream.read())
# save bytes in a buffer

img = Image.open(image_bytes)
# produces a PIL Image object

size = img.size
# read the size of the Image object

asset.width = size[0]
asset.height = size[1]
# set the size to the ORM

image_bytes.seek(0)
response = s3.Object('my-bucket', asset.s3_key()).put(Body=image_bytes)
# upload to S3

请注意对 seek 的调用以及在对 S3 的调用中对 BytesIO 的使用。 BytesIOStringIO 对于做这类事情有多么有用,我怎么强调都不为过!

关于Python Flask-如何在将图像上传到 Amazon s3 之前读取图像的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46351964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com