【发布时间】:2014-01-27 02:41:05
【问题描述】:
我试图让 S3 Direct 客户端 PUT 操作正常工作。
我们有一个在 Python 上运行的后端代码版本,没有任何问题(所以我们知道前端工作正常),我们正在尝试将后端移植到 Node.JS。
我有一个端点设置,它返回一个签名的 PUT URL,这里是代码:
var objectKey = req.query.s3_object_name;
var objectType = req.query.s3_object_type;
var params = {
Bucket: s3Bucket,
Key: objectKey,
// ContentType: objectType, //(I have tried with and without this)
Expires: 60
};
s3.getSignedUrl('putObject', params, function(err, signedUrl){
if(err){
res.send(400);
}else{
res.end(JSON.stringify({
signed_request: signedUrl,
url: "http://"+s3Bucket+".s3.amazonaws.com/"+objectKey
}));
}
});
不幸的是,亚马逊总是返回以下错误:
SignatureDoesNotMatch - 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
是否有人成功让 JavaScript aws-sdk 成功执行此任务?任何指针?我已经两次和三次检查了我的 AWS 密钥和秘密。
问候:
约翰·奇普斯-哈丁
【问题讨论】:
-
您是否收到此代码中的错误,或者当您尝试 PUT 到此代码生成的签名 URL 时?
-
@TheReddest 代码没有错误,它确实返回了一个看起来有效的 URL。就在我尝试使用它的时候。附:我们让它在 Python 上工作,所以我们知道前端很好。还有……这是我们用来让它在 Python 中工作的指南……devcenter.heroku.com/articles/s3-upload-python
-
@TheReddest 这里有更多信息......显示了为策略请求和亚马逊请求发送和接收的数据类型......pastebin.com/w3Psrep0
-
@TheReddest 在玩了更多之后......看起来我让它工作了,但我不满意解决方案是手动完成而不是使用内置 aws-sdk 功能。我的解决方法可以在这里看到:forums.aws.amazon.com/thread.jspa?messageID=519010񾭢
标签: javascript node.js amazon-web-services amazon-s3