我正在使用 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);
但仍然没有运气。关于如何解决这个问题的任何想法?
答案 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);