Python経由で画像をS3にアップロードしようとしています。私のコードは次のようになります。
import os
from PIL import Image
import boto
from boto.s3.key import Key
def upload_to_s3(aws_access_key_id, aws_secret_access_key, file, bucket, key, callback=None, md5=None, reduced_redundancy=False, content_type=None):
conn = boto.connect_s3(aws_access_key_id, aws_secret_access_key)
bucket = conn.get_bucket(bucket, validate=False)
k = Key(bucket)
k.key = key
k.set_contents_from_file(file)
AWS_ACCESS_KEY = "...."
AWS_ACCESS_SECRET_KEY = "....."
filename = "images/image_0.jpg"
file = Image.open(filename)
key = "image"
bucket = 'images'
upload_to_s3(AWS_ACCESS_KEY, AWS_ACCESS_SECRET_KEY, file, bucket, key)
このエラーメッセージが表示されます。
S3ResponseError: S3ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidRequest</Code><Message> The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.</Message>
<RequestId>90593132BA5E6D6C</RequestId>
<HostId>...</HostId></Error>
このコードは、このWebサイトのチュートリアルに基づいています。http://stackabuse.com/example-upload-a-file-to-aws-s3/
私はk.set_contents_from_fileとk.set_contents_from_filenameを試しましたが、どちらもうまくいかないようです。
エラーはAWS4-HMAC-SHA256の使用について何かを述べていますが、その方法はわかりません。 AWS4-HMAC-SHA256を使用する以外に、この問題を解決する別の方法はありますか?誰かが私を助けてくれたら、本当に感謝しています。
ありがとうございました!
回答 1 件
関連記事
- Laravel8での複数の画像のアップロードに関する問題
- Pythonはスクレイプイメージを要求し、「data:image /」の形式でsrcを返します
- AspNetコアに画像をアップロードできませんでした
- Django:ユーザーは画像をアップロードできますが、画像が表示されません:HTMLの問題? (初心者ヘルプ)
- PythonリクエストでFlaskアプリケーションにファイルをアップロードする方法
- PythonSeleniumはすべての画像タグを選択するわけではありません
- テキストを画像のPythonPILに合わせてサイズ変更します
- Pythonで画像を読み取り、定義されたピクセルの順序で書き換えるにはどうすればよいですか?
- vuetify画像アップロードプレビュー
- 画像のアップロード時にエラー413ペイロードが大きすぎます
使用するだけ:
コードに資格情報を入れないようにしてください。代わりに:
Amazon EC2インスタンスからコードを実行している場合は、単にIAMロール 適切な権限を持つインスタンスに。資格情報は自動的に使用されます。
自分のコンピューターでコードを実行している場合は、AWS Command-Line Interface(CLI)
aws configure
を使用します 資格情報をファイルに保存するコマンド。これはコードで自動的に使用されます。