使用putObject时,使用Meteor和aws-sdk时出现SignatureDoesNotMatch错误

时间:2014-07-11 03:00:13

标签: amazon-web-services meteor

我不太确定这里发生了什么。使用完全相同的凭据和允许任何内容的策略,我可以有效地获取我想要的任何对象。但是,创建一个用于上传文件的签名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的服务器端功能。我再次测试并知道凭证允许我GET并正确地执行其他操作。

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": "*"
    }
  ]
}

0 个答案:

没有答案
相关问题