使用签名URL上传到S3时出现403(禁止访问)错误。
使用签名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
我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。 ...等等