Korzystanie następujące Delphi XE2 (Update 4) kod:błąd SignatureDoesNotMatch gdy Content-Type jest 'text/*' używając 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);
zawsze pojawia się błąd przy wywołaniu UploadObject:
Nie powiodło się: HTTP/1.1 403 Forbidden - podpis żądania, który obliczamy, nie pasuje do podanego przez Ciebie podpisu. Sprawdź klucz i podpisz metodę: . (SignatureDoesNotMatch)
Dzieje się tak tylko wtedy, gdy typ zawartości ustawiony jest na "text/plain", "text/html" lub tekst cokolwiek. Używając dokładnie tego samego kodu, jeśli po prostu zmienisz typ zawartości na dowolny inny typ zawartości, np. "video/3gpp", a następnie działa zgodnie z oczekiwaniami i bez błędów. Rzeczywista treść przesłanego obiektu nie jest istotna i nie ma wpływu na błąd.
Przeszukałem kod Indy w Delphi, ale nie jestem pewien, dlaczego typ zawartości tekstu zawsze podaje ten błąd.
Wszelkie pomysły?
Cieszę się, że udało się to naprawić samodzielnie. to dokładnie ten sam problem podczas próby aktualizacji tekstu/html. W tym czasie uciekłem się do "html" - ale potem Internet Explorer miał problemy z przeglądaniem plików. –