我尝试将图像上传到私有S3存储桶,该存储桶具有如下所示的预签名网址,并且还向Lambda IAM角色授予了完整的S3访问权限。
const S3 = new aws.S3({
s3ForcePathStyle: true,
endpoint: 's3BucketUrl',
signatureVersion: 'v4',
});
const s3params = {
Bucket: 's3ImagesBucketName',
Key: fileName,
Body: buf, // base64 image data
ContentEncoding: 'base64',
ContentType: 'image/jpeg',
ACL: 'bucket-owner-full-control',
};
S3.getSignedUrl('putObject', s3params, (err, url) => {
if (err == null) {
logger.info('SignedUrl -> ', url);
const options = {
method: 'PUT',
url: url,
};
request(options, (err, res, body) => {
if (err == null) {
logger.info('no errors occurred!', body);
}
});
} else {
logger.error('Error ', err);
}
});
这将引发“我们计算出的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。”错误。