为什么我可能会从S3 Amazon Pre-Signed Url PUT请求中收到SignatureDoesNotMatch
错误?
我正在使用AWS Javascript SDK生成签名的putObject
网址,并使用Dropzone.js发布jQuery Ajax PUT请求来管理文件上传。
上传适用于curl -v -T <IMAGE> <PRE-SIGNED-URL>
。
请求:
// Send uploads to s3 signed urls.
// @param res [Object] of signed-url's for image files.
function sendFiles(res){
res.forEach(function(signedUrl){
// Get file for associated Dropzone queued file.
var file = returnFile(signedUrl.options.id);
// signedUrl.url returns:
// https://bucket.s3-us-west-1.amazonaws.com/path/(key:filename)Type=image%2Fjpeg&Expires=1449874843&Signature=####&x-amz-acl=public-read-write`
$.ajax({
url: signedUrl.url,
type: 'PUT',
data: file.upload,
contentType:'multipart/form',
dataType: 'json',
complete:function(data){
console.log("Done", data);
},
error:function(data){
console.log("Error", data);
}
});
});
}
响应:
<Code>
SignatureDoesNotMatch
</Code>
<Message>
The request signature we calculated does not match the signature you provided.
Check your key and signing method.
</Message>
答案 0 :(得分:0)
我找到了解决方案。这需要两次修改。我希望有人能更好地解释它们。
第一的
我必须在aws-sdk返回的s3 signed url字符串上运行decodeURIComponent()
。
第二
我必须更改三个并为ajax PUT请求添加两个新选项。
{
data: file,
contentType:'image/jpeg',
dataType:"text",
cache : false,
processData : false
}