Amazon web services 使用putObject、Meteor和aws sdk时出现SignatureDesNotMatch错误

Amazon web services 使用putObject、Meteor和aws sdk时出现SignatureDesNotMatch错误,amazon-web-services,meteor,Amazon Web Services,Meteor,我不太清楚这里发生了什么。使用完全相同的凭证和允许任何操作的策略,我可以有效地获得我想要的任何对象。创建用于上载文件的签名url,但是,我遇到以下错误。我尝试过创建一组新的凭据,更改帐户的权限,使用POST而不是PUT,现在我很困惑为什么我得到了错误的签名 <Error> <Code>SignatureDoesNotMatch</Code> <Message> The request signature we calculated does not

我不太清楚这里发生了什么。使用完全相同的凭证和允许任何操作的策略,我可以有效地获得我想要的任何对象。创建用于上载文件的签名url,但是,我遇到以下错误。我尝试过创建一组新的凭据,更改帐户的权限,使用POST而不是PUT,现在我很困惑为什么我得到了错误的签名

<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
<StringToSignBytes>
47 45 54 0a 0a 0a 31 34 30 35 30 34 37 35 30 36 0a 2f 64 6f 63 73 65 72 76 2f 74 65 73 74 2e 6a 70 67
</StringToSignBytes>
<RequestId>B0D5564858E39BC8</RequestId>
<HostId>
a7pcxkko4MFGbWD6WbE/pxymtOXm9UjMvYeuY0HKhMUCRkyx2H+XFH673OAsnu7RNjkzbQ/n01o=
</HostId>
<SignatureProvided>GdXhr+Md2bEyWCZIxdHRjyKbznY=</SignatureProvided>
<StringToSign>GET 1405047506 /docserv/test.jpg</StringToSign>
<AWSAccessKeyId>AKIAJTXUFSQQNFSKB4NQ</AWSAccessKeyId>
</Error>
下面是我调用的服务器端函数,用于生成已签名的URL。同样,我已经测试过,并且知道凭据允许我正确地获取和执行其他操作

function insertDocS3(fileName){

    if(Meteor.settings.AWS){
        AWS.config.update({'accessKeyId': Meteor.settings.AWS.accessKeyId, 
            'secretAccessKey': Meteor.settings.AWS.secretAccessKey});
    } else{
        console.log("AWS Settings Missing");
    }
    s3 = new AWS.S3();
    var key = fileName;

    var params = {Bucket: "docserv", Key: key};
    var url = s3. getSignedUrl('putObject', params);
    console.log("The URL is: ", url);

    return url;
}
以下是调用服务器函数并使用AJAX放置文件的客户端代码:

uploadToS3 = function(){

    var allFiles = $('input[type=file]').get(0).files;
    for(var i = 0; i< allFiles.length; i++){
        fd = new FormData();
        fd.append(allFiles.item(i).name, "string");

        var filename = allFiles.item(i).name.split('\\').pop();

        Meteor.call('insertDocS3', filename, function(error, result){
            $.ajax({
                type:"POST",
                url: result,
                data: fd,
                processData: false,
                success:function(response){
                    alert("succeeded");
                }
            });

        });


    }
}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    }
  ]
}