使用签名URL上传到S3时出现403(禁止访问)错误。

11 浏览
0 Comments

使用签名URL上传到S3时出现403(禁止访问)错误。

我正在尝试通过浏览器生成预签名URL,然后将文件上传到S3。我的服务器端代码如下,并生成URL:

let s3 = new aws.S3({
  // 用于开发目的
  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,并将其传递给前端。然后在前端,我尝试使用axios和签名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禁止错误。如果我访问链接,会有一些包含更多信息的XML:


SignatureDoesNotMatch

我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。

...等等

0