预签名的S3 URL签名不匹配

标题说明了一切。 这是我的代码;

我使用节点强大的文件。

form.on("end",function(field, file){ params.Body = fs.createReadStream(params.filePath) delete params.filePath; S3.getSignedUrl('putObject',params, function(err, url) { if(err){console.log(err);} console.log(url); }); }) 

成功上传后,urlvariables返回s3 url,如下所示;

https://bucket-name.s3.amazonaws.com/746575308_8c081369df.jpg?AWSAccessKeyId=[key]&Expires=[date]&Signature=[signature]&x-amz-acl=public-read

但仍然得到SignatureDoesNotMatch错误。 在描述中说

我们计算的请求签名与您提供的签名不符。 检查您的密钥和签名方法。

这是我的参数

 params = { Bucket:"bucketname", Key: file.name, ACL: 'public-read' } 

我错过了什么?

试试这个。 您需要上传对象,然后针对现有对象生成签名的url。

 var s3bucket = 'somebucket'; var s3Key = '/some/key', var body = fs.createReadStream('/some/local/file.txt'); var params = { Bucket: s3bucket, Key: s3Key, Body: body }; s3.upload(params, function(err) { if (err) { cb_1(err); } else { var params = { Bucket: s3bucket, Key: s3Key, Expires: parseInt(ttl) }; s3.getSignedUrl('getObject', params, function(err, url) { if (err) { console.log(err); } else { console.log(err); } }); } });