Использование Delphi XE2 Update 3 У меня проблема с загрузкой блока нулевых байтов в Azure.Когда я говорю ноль байтов, я имею в виду массив байтов с каждым элементом, установленным на ноль (это не нулевая длина).
Например:
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);
Если приведенный выше код выполняется, тоВозникло исключение при вызове PutBlock:
Project Project1.exe поднял класс исключения EIPHTTPProtocolExceptionPeer с сообщением «HTTP / 1.1 403 Серверу не удалось аутентифицировать запрос.Убедитесь, что значение заголовка Authorization сформировано правильно, включая подпись. '.
Но если вы измените строку FillMemory так, чтобы она заполняла ее цифрами 1 (или чем угодно, кроме нуля)), то работает без ошибок.Почему?
Спасибо за любую помощь.