将图像数据从迭代器对象保存到Python中的AWS S3

人气:125 发布:2023-01-03 标签: amazon-web-services amazon-s3 python boto

问题描述

我调用的API返回包含图像数据的迭代器对象。我想遍历它们并上传到S3。我可以在将它们转储/上传到S3之前或之后将它们打开到.png.jpeg

import boto3

# Download / open photo
img_obj = gmaps.places_photo(ph, max_width = 500, max_height = 400)
            
print(img_obj)

<generator object Response.iter_content.<locals>.generate at 0x7ffa2dsa7820>
            
s3 = boto3.client('s3')
with open('output_image_{}.png'.format(c), 'w') as data:
    for chunk in img_obj:
       s3.upload_fileobj(data,'mybucket','img/{}'.format(chunk))

错误:

Input <_io.BufferedWriter name='output_image_1.png'> of type: <class '_io.BufferedWriter'> is not supported.

在本地计算机上,我能够写入文件:

with open("output_image_{}.png".format(c), "w") as fp:
    for chunk in img_obj:
       fp.write(chunk)

我要直接将img_obj保存在AWS S3上。

推荐答案

可以使用s3fspng格式保存图像。

我可以使用以下代码重新创建并实现该示例:

from PIL import Image
import s3fs

s3=s3fs.S3FileSystem(client_kwargs=<aws_credentials>)


img_obj = Image.open('sample_file.png')
img_obj.save(s3.open('s3:///<bucket_name>/sample_file.png', 'wb'), 'PNG')

18