Я пытаюсь создать предварительно подписанный URL-адрес, а затем загружать файл на S3 через браузер. Мой серверный код выглядит так, и он генерирует URL-адрес:
let s3 = new aws.S3({
// for dev purposes
accessKeyId: 'MY-ACCESS-KEY-ID',
secretAccessKey: 'MY-SECRET-ACCESS-KEY'
});
let params = {
Bucket: 'reqlist-user-storage',
Key: req.body.fileName,
Expires: 60,
ContentType: req.body.fileType,
ACL: 'public-read'
};
s3.getSignedUrl('putObject', params, (err, url) => {
if (err) return console.log(err);
res.json({ url: url });
});
Кажется, эта часть работает нормально. Я могу видеть URL-адрес, если я его запишу, и он передает его в интерфейс. Затем, на переднем конце, я пытаюсь загрузить файл с аксиомами и подписанным URL:
.then(res => {
var options = { headers: { 'Content-Type': fileType } };
return axios.put(res.data.url, fileFromFileInput, options);
}).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
});
}
При этом я получаю ошибку 403 Forbidden. Если я следую ссылке, там есть XML с дополнительной информацией:
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
...etc