如何使用预先签名的URL将“ putObject”到私有S3存储桶?

时间:2018-07-13 01:03:45

标签: amazon-web-services amazon-s3

我尝试将图像上传到私有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);
      }
    });

这将引发“我们计算出的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。”错误。

0 个答案:

没有答案