gpt4 book ai didi

javascript - 无法让 node.js 返回有效的签名 PUT URL

转载 作者:行者123 更新时间:2023-11-30 08:03:57 24 4
gpt4 key购买 nike

为了让 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
}));
}
});

不幸的是,Amazon 总是返回以下错误:

SignatureDoesNotMatch - 我们计算出的请求签名与您提供的签名不匹配。检查您的 key 和签名方法。

有人成功获得 JavaScript aws-sdk 来成功执行此任务吗?任何指针?我对我的 AWS Key 和 Secret 进行了两次和三次检查。

问候:

约翰·奇普斯-哈丁

最佳答案

S3 似乎在错误消息中为您提供了答案,尽管您可能没有意识到这一点。

<StringToSign>PUT

image/jpeg
1390733729
x-amz-acl:public-read
/arenaupload/vV61536.jpg</StringToSign>

对于任何给定的请求,只有恰好一个可能有效的“要签名的字符串”,如果您不(或 SDK 不)以该字符串开头,那么,当然,这是行不通的。

来自 S3 的错误响应没有提供您实际尝试签名的字符串,因为它不知道该信息。根据它拒绝的请求,它会为您提供您应该尝试签名的字符串的规范版本。

您的解决方法有效,因为您已将 x-amz-acl:public-read 添加到要签名的字符串中...但是您的代码在原始问题中不是随时随地指定该信息。我不知道 JS-SDK 期望的格式是 ACL: "public-read" 还是它想要看到的格式,大概在 params 中,使这项工作但似乎很明显,您没有要求 SDK 签署与您随后尝试执行的实际上传完全匹配的请求。

关于javascript - 无法让 node.js 返回有效的签名 PUT URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21351003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com