对节点服务器提供的已签名S3 URL的PUT请求返回400错误:"不支持您提供的授权机制。请使用AWS4-HMAC-SHA256。"
我认为我的凭据正在正确发送,因为签名的URL正在返回给服务器。此外,存储桶的CORS策略配置为允许来自任何来源的请求。
服务器代码:
router.post('/avatar', (req, res) => {
var s3 = new aws.S3();
var params = {
Bucket: 'knows',
Key: req.body.fileName + '-' + Date.now(),
Expires: 120,
ContentType: req.body.fileType,
ACL: 'public-read'
};
s3.getSignedUrl('putObject', params, function(err, data) {
if (err) {
res.json({err: err})
} else {
console.log(data)
res.json({signedUrl: data})
}
})
})
客户代码(反应):
handleSubmit(event){
event.preventDefault();
var fileObject = {
fileName: this.state.file.name,
fileType: this.state.file.type
}
axios.post('/user/avatar', fileObject).then(response => {
axios.put(response.data.signedUrl, this.state.file).then(result => {
console.log(result)
}).catch(err => {
console.log(err)
alert('Upload failed :(')
})
}).catch(err => {
alert('Upload failed :(')
})
}
是否与在服务器上设置自定义密钥有关?