PythonでS3にファイルを保存する

ユーザーがアップロードした画像とかをS3に保存したいときに使うメモ。

AWSのAccessKeyとSecretAccessKeyはAWSコンソールにログインして、「右上のアカウント名 > Security Credentials」 で生成しておきます。

pip install boto

S3に投げ込むのはboto(読みはボートー、でいいんだろうか。。。)だけあればOK。Python2.7でもPython3.4でもpipでインストールできました。

$ pip freeze
boto==2.32.1

投げ込むコードは以下

from boto.s3.connection import S3Connection
from boto.s3.key import Key


def main():
    print('start')
    _s3 = S3Connection(
        'AccessKey',
        'SecretAccessKey',
    )
    _bucket = _s3.get_bucket('バケット名称')
    _key = Key(_bucket)
    _key.set_metadata('Content-Type', 'image/jpeg')
    _key.key = 'img.jpg'
    _key.set_contents_from_filename('./img.jpg')

if __name__=='__main__':
        main()

非常に簡単。

set_metadataは無くてもJpegファイルの場合は問題ないっぽいけど、Content-Typeによっては問題が出たりするのかもしれない。

バケット側のパーミッションとかポリシーとかはまた別の話ということで。