EIPHTTPProtocolExceptionPeer exception en utilisant PutBlock avec tableau d'octets tous mis à zéro

StackOverflow https://stackoverflow.com/questions/9307637

Question

Utilisation de Delphi XE2 Mise à jour 3 Je vais avoir un problème L'ajout d'un bloc de zéro octets à Azure. Quand je dis zéro octets, je veux dire un tableau d'octets avec chaque jeu d'éléments à zéro (ce n'est pas une longueur nulle).

Par exemple:

var
  ConInfo: TAzureConnectionInfo;
  RespInfo: TCloudResponseInfo;
  BlobService: TAzureBlobService;
  Content: TBytes;
  MD5: String;
  Hasher: TIdHashMessageDigest5;
begin
  ConInfo:=TAzureConnectionInfo.Create(self);
  ConInfo.AccountName:='YOUR ACCOUNT NAME';
  ConInfo.AccountKey:='YOUR ACCOUNT KEY';
  ConInfo.Protocol:='http';

  BlobService:=TAzureBlobService.Create(ConInfo);    
  RespInfo:=TCloudResponseInfo.Create;

  SetLength(Content, 1048576); // 1 MByte
  FillMemory(@Content[0], 1048576, 0); // << --- fill it with anything except 0 and it works

  Hasher:=TIdHashMessageDigest5.Create;
  MD5:=Data.Cloud.CloudAPI.EncodeBytes64(Hasher.HashBytes(Content));
  Hasher.Free;

  BlobService.PutBlock('CONTAINER NAME', 'BLOB NAME', MD5, Content, MD5, '', RespInfo);

Si le code ci-dessus est exécuté alors une exception est levée sur l'appel à PutBlock:

Projet Project1.exe soulevé classe d'exception EIPHTTPProtocolExceptionPeer avec le message « HTTP / 1.1 403 serveur a échoué pour authentifier la demande. Assurez-vous que la valeur d'autorisation en-tête est formé correctement, y compris la signature. '.

Mais si vous modifiez la ligne FillMemory afin qu'il remplisse avec 1 (ou de quoi que ce soit, mais zéro), il fonctionne sans erreur. Pourquoi?

Merci pour toute aide.

Était-ce utile?

La solution

, il semble Incroyablement que le problème est la valeur ID de bloc de ttgbNgpWctgMJ0MPORU + LA ==

Si vous l'utilisez comme un ID de bloc, vous obtenez cette erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top