我正在使用generate_presigned_post()函数来使用 lambda 生成一个预签名的 url,如下所示:
response= s3_client.generate_presigned_post(
Bucket = bucket_name,
Key = key,
ExpiresIn = 30
)
响应格式为:
{
"signed_url": {
"url": "xxx",
"fields": {
"key": "xxx",
"x-amz-algorithm": "xxx",
"x-amz-credential": "xxx",
"x-amz-date": "xxx",
"x-amz-security-token": "xxx",
"x-amz-signature": "xxx"
}
}
}
在客户端,我使用以下代码上传图像:
function uploadToS3(data){
var form = new FormData();
var url = JSON.parse(data["signed_url"])["url"]
var fields = JSON.parse(data["signed_url"])["fields"]
var presigned_url = url + fields.key + "?" +
"X-Amz-Algorithm=" + fields["x-amz-algorithm"] +
"&X-Amz-Credential=" + fields["x-amz-credential"] +
"&X-Amz-Date=" + fields["x-amz-date"] +
"&X-Amz-Expires=30"+
"&X-Amz-SignedHeaders=host"+
"&X-Amz-Security-Token=" + encodeURIComponent(fields["x-amz-security-token"]) +
// "&policy="+ fields["policy"]
"&X-Amz-Signature=" + fields["x-amz-signature"];
form.append("file", $('#customFile1').get()[0].files[0], data['signed_url']['fields']['key']);
// for (var pair of form.entries()) {
// console.log(pair[0]+ ', ' + pair[1]);
// }
$.ajax({
type : 'POST',
url: presigned_url,
data: form,
// timeout:0,
processData:false,
// mimeType: "multipart/form-data",
contentType: false,
success:function(resp){
console.log(resp)
},
fail:function(resp){
console.log(resp)
},
error:function(resp) {
console.log(resp);
}
})
}
我收到此错误,我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。