addRequestParameterを調べましたか? これにより、クエリ文字列パラメーターが追加され、それらのパラメーターがないとリクエストは失敗します。
例えば
generatePresignedUrlRequest.addRequestParameter(Headers.S3_USER_METADATA_PREFIX + "test", "true");
生成された URL には、次のパラメーターが含まれます。
https://aws-domain/file.ext?x-amz-meta-test=true&X-Amz-Security-Token=<TOKEN>
アップデート:
Node.js でgetSignedUrl APIを使用して、クエリ文字列パラメーターでユーザー メタデータを使用して署名付き URL を生成しています。私は Java 開発者ではないためaddRequestParameter
、メソッドで提供されたメタデータを使用して署名付き URL を生成するように見えるものを使用することを提案しました。
Node.js コード
const url = s3.getSignedUrl('putObject', {
'Bucket': 'my-bucket',
'Key': 'signed.json',
'Metadata': {
'my-id': '1234'
}
});
署名付き URL :
https://my-bucket.s3.eu-west-1.amazonaws.com/signed.json?AWSAccessKeyId=<AccessKey>&Expires=1549497606&Signature=<SignatureKey>&x-amz-meta-my-id=1234
ファイルのアップロード:
curl -k -X PUT -T "signed.json" "https://my-bucket.s3.eu-west-1.amazonaws.com/signed.json?AWSAccessKeyId=<AccessKey>&Expires=1549497606&Signature=<SignatureKey>&x-amz-meta-my-id=1234"
ユーザー メタデータ:

クライアントは、ユーザー メタデータを追加できるようにするためにヘッダーを追加する必要はありません。クライアントが x-amz-meta-* を変更または削除しようとすると、SignatureDoesNotMatch
まさに必要なものが得られます。
x-amz-meta-my-id を変更する
curl -k -X PUT -T "signed.json" "https://my-bucket.s3.eu-west-1.amazonaws.com/signed.json?AWSAccessKeyId=<AccessKey>&Expires=1549497606&Signature=<SignatureKey>&x-amz-meta-my-id=123"
予想されるエラー:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>AKIAJ5PO6T7F772ZPSPQ</AWSAccessKeyId>