amazon-web-services - 如何使用预签名 URL 将对象“放入”私有 S3 存储桶?
问题描述
我尝试将图像上传到私有 S3 存储桶,该存储桶具有如下预签名的 url,并为 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);
}
});
这会抛出“我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。错误。