Python requests + boto3 で AWS S3 に画像を直接アップロード
はじめに
Python boto3 で AWS S3 を操作する では、ローカルに保存されているファイルや画像をアップロードする方法などを調べた。
また、Python requests で画像をダウンロードして保存する方法 では、requests
を使って、画像をダウンロードする方法を調べた。
今回は requests
でダウンロードした画像を、ローカルに保存することなく 直接 S3 にアップロードする方法をまとめた。
TL;DR
res = requests.get(image_url, stream=True)
でダウンロードbucket.upload_fileobj(res.raw, "key/of/file")
でアップロード- 必要に応じて
ExtraArgs={"ContentType": res.headers["Content-Type"]}
を付与
目的・やったこと
requests
でダウンロードした画像を、ローカルに保存することなく 直接 S3 にアップロードする方法を調べた。
目次
環境・条件
1 | $ sw_vers |
詳細
stream=True
を付けてダウンロード
1 | res = requests.get(url, stream=True) |
upload_fileobj
でアップロード
upload_file
ではなく、upload_fileobj
メソッドを使い、第一引数には res.raw
を指定する。
1 | bucket.upload_fileobj(res.raw, "key/of/file") |
前回と同様、必要に応じて ExtraArgs
を指定する。
1 | bucket.upload_fileobj(res.raw, "key/of/file", ExtraArgs={"ContentType": res.headers["Content-Type"], "ACL": "public-read"}) |
まとめ
res = requests.get(image_url, stream=True)
でダウンロードbucket.upload_fileobj(res.raw, "key/of/file")
でアップロード- 必要に応じて
ExtraArgs={"ContentType": res.headers["Content-Type"]}
を付与
参考文献
- boto/boto3: AWS SDK for Python
- AWS SDK for Python | AWS
- Boto 3 Documentation — Boto 3 Docs 1.9.200 documentation
- python - Upload image available at public URL to S3 using boto - Stack Overflow
関連記事
- Python boto3 で AWS S3 を操作する
- AWS S3 バケットをリネーム(できないので別バケットにコピー)
- AWS lambda で S3 の画像をリサイズする(チュートリアル)
- docker-lambda を使って AWS Lambda Function を開発する方法
- AWS S3 Bucket 内のオブジェクトの ACL(アクセス権限) を一括で変更する方法
- Python requests で画像をダウンロードして保存する方法
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア