Я пытаюсь вытащить изображение из 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.
Он отлично работает, если я просто рисую изображение, а затем верну его обратно, не манипулируя им. Я не совсем уверен, что происходит здесь.