使用 imageio 和 boto3 写入 s3

Writing to s3 using imageio and boto3

我想将图像写入 aws s3。在播放视频时,我正在尝试通过某些功能处理图像,然后在完成后我希望将其存储到特定路径。 imageio 直接检查名称中的扩展名并为适当的文件格式写入图像。

s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket)
obj = bucket.Object(filepath+'/'+second+'.jpg')
img.imwrite(obj)

如果我将它写入本地位置,然后将其写入 s3,那么它就可以工作,但是有没有更好的方法可以将它存储到 s3 而不必在本地写入。

感谢任何帮助。

您可以使用 python 的 io 包中的 BytesIO 之类的东西在内存中创建文件对象,并将其传递给 boto3 客户端,如下所示:

from io import BytesIO

s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket)
in_memory_file = BytesIO()
img.imwrite(in_memory_file)
obj = bucket.Object(filepath+'/'+second+'.jpg')
obj.upload_fileobj(in_memory_file)

这应该可以解决问题,而不必将文件写入磁盘。