首页 > 解决方案 > 如何使用预签名 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);
      }
    });

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

标签: amazon-web-servicesamazon-s3

解决方案


推荐阅读