我正在尝试使用AWS S3存储一些图像。一切都进行得很顺利,直到我开始从s3.getSignedUrl获取的URL上放置图像约400秒钟为止。当时我的代码如下:
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。它是未定义的。我在这里还想念什么?
编辑: 好吧,我将我的密钥重新添加到构造函数中,并且能够上传图像。新问题是我无法打开它们。每次访问都被拒绝。我添加了适当的buvket政策,但没有帮助:(
{
"Version": "2012-10-17",
"Id": "Policy1547050603038",
"Statement": [
{
"Sid": "Stmt1547050601490",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket-name/*"
}
]
}