我正在尝试从 s3 中提取图像,对其进行量化/操作,然后将其存储回 s3 而不将任何内容保存到磁盘(完全在内存中)。我能够做到一次,但在返回代码并再次尝试时它没有用。代码如下:
import boto3
import io
from PIL import Image
client = boto3.client('s3',aws_access_key_id='',
aws_secret_access_key='')
cur_image = client.get_object(Bucket='mybucket',Key='2016-03-19 19.15.40.jpg')['Body'].read()
loaded_image = Image.open(io.BytesIO(cur_image))
quantized_image = loaded_image.quantize(colors=50)
saved_quantized_image = io.BytesIO()
quantized_image.save(saved_quantized_image,'PNG')
client.put_object(ACL='public-read',Body=saved_quantized_image,Key='testimage.png',Bucket='mybucket')
我收到的错误是:
botocore.exceptions.ClientError: An error occurred (BadDigest) when calling the PutObject operation: The Content-MD5 you specified did not match what we received.
如果我只是拉出一个图像,然后在不对其进行操作的情况下将其放回原位,则效果很好。我不太确定这里发生了什么。
原文由 user3610691 发布,翻译遵循 CC BY-SA 4.0 许可协议
我遇到了同样的问题,解决方案是寻找保存的内存文件的开头: