2
使用Delphi XE2更新3我有一個問題上傳一個零字節的塊到Azure的問題。當我說零字節時,我的意思是一個字節數組,每個元素設置爲零(它不是零長度)。EIPHTTPProtocolExceptionPeer異常使用PutBlock與字節數組全部設置爲零
例如:
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:
項目PROJECT1.EXE凸起異常類 EIPHTTPProtocolExceptionPeer與消息「HTTP /1.1 403服務器失敗 驗證請求。確保授權 標題的值正確地形成,包括簽名。'。
但是,如果你改變了FillMemory線,使之與1(或什麼,但零)填充它,然後它沒有錯誤。爲什麼?
感謝您的任何幫助。
實際上,它是TCloudService.URLEncodeValue()中的一個錯誤。它應該沒有URL編碼加號(+)。 – Mick 2012-02-28 14:38:50