如何从s3.getSignedUrl()获取网址

时间:2019-01-08 23:27:29

标签: node.js amazon-web-services express amazon-s3

我正在尝试使用AWS S3存储一些图像。一切都进行得很顺利,直到我开始从s3.getSignedUrl获取的URL上放置图像约400秒钟为止。当时我的代码如下:

const s3 = new AWS.S3({
  accessKeyId,
  secretAccessKey
});

const imageRouter = express.Router();

imageRouter.post('/upload', (req, res) => {
  const type = req.body.ContentType;
  const Key = `${req.session.user.id}/${uuid()}.${type}`;

  s3.getSignedUrl(
    'putObject',
    {
      Bucket: 'cms-bucket-06',
      ContentType: type,
      Key
    },
    (err, url) => {
      console.log('URL ', url); res.send({ Key, url });
    }
  );
});

我从错误中跟踪了链接,发现“不支持您提供的授权机制。请使用AWS4-HMAC-SHA256。”。 所以我做了。像这样:

const s3 = new AWS.S3({signatureVersion: 'v4'});

但是现在我的回调函数中没有URL。它是未定义的。我在这里还想念什么?

编辑: 好吧,我将我的密钥重新添加到构造函数中,并且能够上传图像。新问题是我无法打开它们。每次访问都被拒绝。我添加了适当的buvket政策,但没有帮助:(

{
    "Version": "2012-10-17",
    "Id": "Policy1547050603038",
    "Statement": [
        {
            "Sid": "Stmt1547050601490",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket-name/*"
        }
    ]
}

0 个答案:

没有答案