CONTENT-MD5缺少AZURE门户网站

时间:2017-05-29 10:49:30

标签: c# azure blob md5

我正在使用 c#库在 AZURE blob存储中上传文件。如果我上传带有byte []的文件,它会计算MD5(在AZURE门户中验证 - 显示 CONTENT-MD5 值)。

CloudBlockBlob blockBlob = GetUserProjectsBlob(blobName);
blockBlob.UploadFromByteArray(file, 0, file.Length);

我需要将一个大文件上传到AZURE。所以我正在使用PutBlock& PutBlockList方法..

string blockHash = GetMd5FromStream(new MemoryStream(file));
blockBlob.PutBlock(blockId, new MemoryStream(file, true), blockHash);
// To commit transaction
blockBlob.PutBlockList(blockIDsBase64);

但在上述情况下,AZURE门户网站中缺少 CONTENT-MD5 。我也试过这个..

BlobRequestOptions opt = new BlobRequestOptions();
opt.StoreBlobContentMD5 = true;
UseTransactionalMD5 = true;
blockBlob.PutBlockList(blockIDsBase64, null, opt);

但仍然没有运气。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:2)

在以下代码行中:

string blockHash = GetMd5FromStream(new MemoryStream(file));
blockBlob.PutBlock(blockId, new MemoryStream(file, true), blockHash);
// To commit transaction
blockBlob.PutBlockList(blockIDsBase64);

您实际上是在计算块数据的MD5哈希值。当Storage Service收到此数据时,它会执行哈希验证以确保块数据不会损坏。

BlobRequestOptions opt = new BlobRequestOptions();
opt.StoreBlobContentMD5 = true;
UseTransactionalMD5 = true;
blockBlob.PutBlockList(blockIDsBase64, null, opt);

上面的代码并未指示Storage Service计算您正在上传的blob的哈希值。您需要自己计算blob的MD5哈希值并将其作为属性的一部分发送,例如:

blockBlob.Properties.ContentMD5 = "computed hash";
blockBlob.PutBlockList(blockIDsBase64, null, opt);