0

我正在尝试为 TideSDK 拼凑一个 S3 客户端。我已经过了日期格式/匹配,要签名的字符串 - 但我现在收到错误SignatureDoesNotMatch

我已经尝试了几乎所有我能想到的角度,但仍然不足。也许你们中的一个人可以发现我的方式的错误。注意:AWS 在别处定义。

var podcastFile = Ti.Filesystem.getFile(AWS.fileName);
var fileContents = podcastFile.read();

AWS.http = Ti.Network.createHTTPClient();
AWS.fileURL = 'http://'+AWS.AWSBucketName+'.s3.amazonaws.com/show.json';        
AWS.http.setTimeout(AWS.timeout);
AWS.http.open('PUT', AWS.fileURL, false);

var mimeType = 'text/json';
var fileName = 'show.json';
var curDate = AWS.Date.formatDate(new Date(),'E, d MMM yyyy HH:mm:ss') + ' -0400';
var StringToSign = 'PUT\n\n'+mimeType+'\n' + curDate + '\n/'+AWS.AWSBucketName+'/' + fileName;

var AWSAccessKeyID = 'AWS ' + AWS.APIKey + ':';
var AWSSignature = Ti.Codec.digestHMACToHex(Ti.Codec.SHA1, AWS.SecretKey, StringToSign);
var AWSAuthHeader = AWSAccessKeyID.concat(AWSSignature);

AWS.http.setRequestHeader('Authorization', AWSAuthHeader); 
AWS.http.setRequestHeader('Content-Type', 'text/json');
AWS.http.setRequestHeader('Content-Length', podcastFile.size().toString());
AWS.http.setRequestHeader('Host', 's3.amazonaws.com');
AWS.http.setRequestHeader('Date', curDate);
AWS.http.setRequestHeader('Accept-Encoding', 'gzip');
AWS.http.setRequestHeader('Proxy-Connection','close');

var headers = AWS.http.getResponseHeaders();
console.log(AWS.http.send(fileContents));
4

1 回答 1

1

我对tidesdk一无所知,但你需要对你的AWSSignature进行base64编码。

我遇到了类似的问题,这个工具帮助了我:http ://aws.amazon.com/code/199 。

于 2013-03-26T21:36:11.987 回答