Я пытаюсь сохранить некоторые изображения с помощью 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/*"
}
]
}