私のコードは正常に文書を正しいバケットにアップロードしています。 AWS S3のバケットにログインしてドキュメントを見ることができます。 boto3でgenerate_signed_urlメソッドを使用して、ドキュメントにアクセスするためにユーザーに送信できるこれらのドキュメントのURLを取得しようとすると、「私たちが計算した要求シグネチャが署名と一致しません」というメッセージでSignatureDoesNotMatchを取得していますあなたの鍵と署名方法を確認してください。SignatureDoesNotMatchの結果となるboto3署名付きURL
私は私が使用(AWSにログインし、ファイルを手動でダウンロードして、それが正常に動作していることを確認)オブジェクト、保存:私はURLを取得しようとすると、私は、その後
s3 = boto3.client('s3', region_name='us-east-2', aws_access_key_id='XXXX', aws_secret_access_key='XXXX', config=Config(signature_version='s3v4'))
s3.put_object(Bucket=self.bucket_name,Key=path, Body=temp_file.getvalue(),ACL='public-read')
を
s3 = boto3.client('s3', region_name='us-east-2', aws_access_key_id='XXXX', aws_secret_access_key='XXXX', config=Config(signature_version='s3v4'))
url = s3.generate_presigned_url(
'put_object', Params={
'Bucket':self.pdffile_storage_bucket_name,
'Key':self.pdffile_url
},
ExpiresIn=604799,
)
AWSアクセスキーに特殊文字が含まれていないことを確認するために、かなり多くのユーザーがウェブ上で会話していました。私はこれをして、私はまだ同じ問題が発生します。
事前署名されたURLを使用する場合は、リクエストヘッダーを見てください。私の場合、 'Content-Type'が送信されており、AWSがそれをチェックするので、URL生成にもそれを追加する必要がありました。 –
@ThijsvanDienこれらのリクエストヘッダを調べる方法についてアドバイスできますか?私は前にそれをしていない。ここであなたの助けをありがとう。 – RailsTweeter
リンクを作成して 'PUT'を実行します。つまり、ユーザーがバケット内の定義済みのキーに文書をアップロードできるようにします。最も簡単なことは、どこからやるのかによって異なります。実際には、それはあなたが欲しいものですか?あなたは、文書へのアクセスを提供したいと言いました。アップロード用のリンクを使ってダウンロード( 'GET')しようとしていますか?それは動作しません。その場合、 '' put_object''ではなく '' get_object''でリンクを作成してください。 '' Key ''はそれだけでなければならないことにも注意してください。アップロード時にあなたが渡したURL( 'path')はありません。 –