2013-03-17 49 views
0

我试图将TideSDK的S3客户端一起零碎。我已经得到了过去的日期格式化/匹配,串签 - 但现在我得到的错误SignatureDoesNotMatch使用TideSDK创建亚马逊授权签名

我已经试过几乎每一个角度我能想到的,但还是来了短。也许你们中的一个可以找到我的方式的错误。注意: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)); 

回答