Как получить URL из s3.getSignedUrl () - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь сохранить некоторые изображения с помощью AWS S3. Все работает гладко, пока я не начал получать 400 с на PUTting изображениях на URL, которые я получил от s3.getSignedUrl. В то время мой код выглядел так:

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 в моей функции обратного вызова. Это не определено. Что мне здесь еще не хватает?

EDIT: Хорошо, я добавил свой ключ обратно в конструктор, и я могу загружать изображения. Новая проблема в том, что я не могу их открыть. Я получаю доступ запрещен каждый раз. Я добавил правильную политику buvket, но это не помогает :(

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