【发布时间】:2012-05-02 07:15:22
【问题描述】:
我尝试为要上传到 azure 的文件设置 MD5 哈希。我收到此错误:
(400, 'HTTP/1.1 400 请求中指定的 MD5 值是 无效的。 MD5 值必须是 128 位和 base64 编码。', $7230400)
这就是我为文件做 md5 的方式:
function MD5(const fileName : string) : string;
var
idmd5 : TIdHashMessageDigest5;
fs : TFileStream;
begin
idmd5 := TIdHashMessageDigest5.Create;
fs := TFileStream.Create(fileName, fmOpenRead OR fmShareDenyWrite) ;
try
result := idmd5.HashStreamAsHex(fs) ;
finally
fs.Free;
idmd5.Free;
end;
end;
......
Headers.Values['Content-MD5'] := MD5(LocalFile);
现在,根据 delphi xe2 上的 azure 规范如何做到这一点?
PD:这个答案How to resolve an InvalidMd5 error returned from the Windows Azure Blob Storage service? 为.NET 解决它:
MD5 md5 = new MD5CryptoServiceProvider();
byte[] blockHash = md5.ComputeHash(buff);
string convertedHash = Convert.ToBase64String(blockHash, 0, 16);
但是不知道怎么翻译成delphi..
【问题讨论】:
-
如果您将数据转储到文件中,然后使用免费的 MD5 计算器之一,您是否得到相同的答案?在尝试对计算器进行故障排除之前,我将从那里开始,因为您的计算可能没有任何问题。也就是说,您假设 Azure 不喜欢您的 MD5,但也许 Azure 不喜欢您的文件。
-
我用 osx md5 命令行对同一个文件进行了相同的测试。
标签: delphi md5 delphi-xe2 azure-storage