Используя следующий код Delphi XE2 (update 4 ):
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:
Failed :HTTP/1.1 403 Forbidden -The request подпись, которую мы рассчитали не соответствует предоставленной вами подписи. Проверьте свой ключ и подпись метод. (SignatureDoesNotMatch)
Это происходит только в том случае, если для типа контента -установлено значение «текст/обычный», «текст/html» или любой другой текст. Используя точно такой же код, если вы просто измените тип содержимого -на любой другой тип содержимого -, например. 'video/3gpp', то он работает как положено и без ошибок. Фактическое содержимое загружаемого объекта не имеет значения и не имеет отношения к получению ошибки или нет.
Я проследил код Indy в Delphi, но не могу понять, почему текстовый тип контента всегда выдает эту ошибку.
Есть идеи?