Ошибка SignatureDoesNotMatch, когда тип содержимого -равен & #39; text/ *& #39; использование TAmazonStorageService.UploadObject

Используя следующий код 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, но не могу понять, почему текстовый тип контента всегда выдает эту ошибку.

Есть идеи?

6
задан Mick 26 April 2012 в 08:35
поделиться