他のシステムがS3バケットにファイルをアップロードするために使用できるURLを生成しようとしています。私はドキュメントと同様の問題を見て、しかし、私は適切な解決策を見つけることができません。PHP Amazon AWS S3 - 事前署名されたURLを使用してオブジェクトをアップロードする
1:
$signedUrl = $this->s3->getCommand(
'PutObject',
array(
'Bucket' => $this->bucket,
'Key' => 'recording_test.mp3',
'Body' => ''
)
)->createPresignedUrl('+2 hours');
2:
$command = $this->s3->getCommand('PutObject', array('Bucket' => $this->bucket, 'Key' => 'recording_test3.mp3', 'Body' => ''));
$request = $command->prepare();
$signedUrl = $this->s3->createPresignedUrl($request, '+2 hours');
は、単にアクセスしようと
IはPreSigned URL複数の方法を作成しようとしている($this->s3
はS3Clientそう参照です) URL次のエラーが表示される:
The request signature we calculated does not match the signature you provided. Check your key and signing method.
私もこの方法で試しました: $ key = 'recording_test2.mp3'; $ url = $ this->バケット '/'。$ key;
$request = $this->s3->put($url);
$signedUrl = $this->s3->createPresignedUrl($request, '+2 hours');
ただし、これは無効なエンドポイントに関するエラーを生成s3.amazonaws.com/bucket/key...
の形式でURLを生成し、フォーマットbucket.s3.amazonaws.com/key...
でそのエンドポイントを使用する必要があります。 URLを手動で変更すると、上記と同じ無効な署名エラーが発生します。
PreSigned URLを生成するのが間違っているやり方は何か分かりません。あなたの署名URLを作成する場合は、あなたがBody
キーを使用してはならない助け
また、エラーの詳細には、 'StringToSign'フィールドがあります。これは、URLを開くかどうかによって異なります。あるいは、ファイルアップロードでフォームで使用します。もしそうなら、バケツにファイルをアップロードするためにURLが適切であることを確認するにはどうすればよいですか? – Giedrius
あなたはまだ同じ問題があるかどうかはわかりませんが、putリクエストでリンクにアクセスする必要があります。 –