以下の関数を実行すればOKです.
def upload_image_to_s3(img, bucket_name, key_name):
"""
imgはPillowのImageオブジェクト
"""
conn = S3Connection(AWS_ACCESS_ID, AWS_SECRET_KEY)
bucket = conn.get_bucket(bucket_name)
k = Key(bucket, key_name)
image_buffer = io.BytesIO()
img.save(image_buffer, 'JPEG')
image_buffer.seek(0) # これを忘れると空データがs3に送られる
k.set_contents_from_string(image_buffer.read())
ポイント: image_buffer.seek(0)を忘れない
seek(0)の存在を忘れており,1時間もハマってしまいました.
PillowのImageでsaveメソッドを使った時,ファイルのカーソル?がファイルの末尾に来るらしく,カーソルを最初に戻してあげる必要があるみたいですね.忘れると,いきなりEOF
,つまり終わりということでS3に空っぽの画像ファイルがアップロードされました.