Domanda

Utilizzo di Delphi XE2 Update 3 Sto avendo un problema caricando un blocco di zero byte per Azure. Quando dico zero byte, intendo un array di byte con ogni set elemento a zero (non è di lunghezza zero).

Ad esempio:

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

Se il codice di cui sopra viene eseguito poi viene sollevata un'eccezione sulla chiamata a PutBlock:

Progetto progetto1.exe sollevato classe di eccezione EIPHTTPProtocolExceptionPeer con il messaggio 'HTTP / 1.1 403 server non riuscita per autenticare la richiesta. Assicurarsi che il valore di autorizzazione intestazione è formata correttamente compresa la firma. '.

Ma se si cambia la FillMemory riga in modo che la riempie di 1 di (o qualcosa, ma zero), allora funziona senza errori. Perché?

Grazie per qualsiasi aiuto.

È stato utile?

Soluzione

Incredibilmente, sembra che il problema è il valore ID del blocco di ttgbNgpWctgMJ0MPORU + LA ==

Se si utilizza come un ID blocco quindi si ottiene questo errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top