使用下面的德尔福XE2(更新4)代码:SignatureDoesNotMatch错误“文/ *”使用TAmazonStorageService.UploadObject
var
ConInfo: TAmazonConnectionInfo;
RespInfo: TCloudResponseInfo;
Service: TAmazonStorageService;
Content: TBytes;
Headers: TStringList;
begin
ConInfo:=TAmazonConnectionInfo.Create(self);
ConInfo.AccountName:='YOUR ACCOUNT NAME';
ConInfo.AccountKey:='YOUR ACCOUNT KEY';
ConInfo.Protocol:='http';
Service:=TAmazonStorageService.Create(ConInfo);
RespInfo:=TCloudResponseInfo.Create;
SetLength(Content, 128);
FillMemory(@Content[0], 128, Byte('x'));
Headers:=TStringList.Create;
Headers.Values['Content-type']:='text/plain';
if not Service.UploadObject('YOUR BUCKET', 'test.txt', Content, TRUE, nil, Headers, amzbaPrivate, RespInfo) then
ShowMessage('Failed:' + RespInfo.StatusMessage);
我总是在呼吁UploadObject得到一个错误:
失败:HTTP/1.1 403禁止 - 我们计算的请求签名 与您提供的签名不匹配。检查您的密钥并签署 方法。 (SignatureDoesNotMatch)
这仅当内容类型被设置为“文本/纯”,文本/ html“,或文本什么事情发生。使用完全相同的代码,如果您只是将内容类型更改为任何其他内容类型,例如'video/3gpp',那么它按预期工作,没有错误。被上传对象的实际内容是不相关的,并且与获取错误没有关系。
我已经追踪了Delphi中的Indy代码,但我很难理解为什么文本内容类型总是会出现这个错误。
任何想法?
很高兴您能够自己解决它。当尝试上传文本/ html时,这个问题完全相同。当时我使用的只是“html” - 但随后Internet Explorer在查看文件时遇到问题。感谢分享!!!!! – 2014-03-11 23:48:49