我的Amazon S3 Bucket工作正常,直到我决定将我的AWS SDK从版本V2更新到模块化V3。
我可以使用sdk编程上传文件,但我不能使用它生成的预签名url上传文件。
const { getSignedUrl } = require('@aws-sdk/s3-request-presigner');
const { S3Client, , PutObjectCommand } = require('@aws-sdk/client-s3');
const s3Client = S3Client({ region: 'us-east-2'});
const params = {
Bucket: '<bucket>',
Key: '1234567890.jpg',
ACL: 'private',
ContentType: 'image/jpg',
// Body: '<base64 encoded image content>'
};
const command = new PutObjectCommand(params);
// await s3Client.send(command); // works fine
const signedUrl = await getSignedUrl(s3Client, command); // generated signed url fails to upload image
当我尝试使用生成的预签名URL进行PUT请求时,我收到403 HTTP错误代码和消息SignatureDoesNotMatch。请指导我可能遗漏了什么,因为我已经为此工作了两天。
2条答案
按热度按时间58wvjzkj1#
你试过这个吗;
https://www.digitalocean.com/community/questions/signature-does-not-match-when-putting-to-presigned-spaces-upload-url
这里有一个链接,了解更多详细信息;
https://www.msp360.com/resources/blog/s3-pre-signed-url-guide/
sc4hvdpw2#
在我创建了一个具有程序访问权限(aws-access-key-id、aws-secret-access-key)的IAM用户,并在put images中附加了一个bucket策略之后,我的用户才开始工作。
}
我还将此IAM用户的凭据添加到
config
我还将CORS规则应用于铲斗,如下所示:
]
我不需要添加ACL,内容类型到配置。