Frage

Mit Delphi XE2 Update 3 habe ich ein Problem mit dem Hochladen eines Blocks von Zero -Bytes auf Azure. Wenn ich null Bytes sage, meine ich ein Array von Bytes, wobei jedes Element auf Null eingestellt ist (es ist keine Nulllänge).

Zum Beispiel:

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);

Wenn der oben genannte Code ausgeführt wird, wird eine Ausnahme beim Anruf bei PutBlock angehoben:

Project Project1.exe Erhöhte Ausnahmeklasse EIPHTTPPROTOCOLExceptionPeer mit Message 'HTTP/1.1 403 Server hat die Anforderung nicht authentifiziert. Stellen Sie sicher, dass der Wert des Autorisierungsheaders korrekt gebildet wird, einschließlich der Signatur. '

Aber wenn Sie die ändern Fillmemory Zeile so, dass es es mit 1 (oder irgendetwas anderes als Null) füllt, dann funktioniert es ohne Fehler. Wieso den?

Danke für jede Hilfe.

War es hilfreich?

Lösung

Unglaublicherweise scheint das Problem der Block -ID -Wert von zu sein ttgbngpwctgmj0mporu+la ==

Wenn Sie es als Block -ID verwenden, erhalten Sie diesen Fehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top