C# CONTENT-MD5缺少AZURE门户

C# CONTENT-MD5缺少AZURE门户,c#,azure,blob,md5,C#,Azure,Blob,Md5,我正在使用c库在AZUREblob存储中上载文件。如果我上传一个字节为[]的文件,它将计算MD5(在AZURE portal中验证-显示CONTENT-MD5值) 我需要上传一个大文件到AZURE。所以我使用PutBlock和PutBlockList方法 string blockHash = GetMd5FromStream(new MemoryStream(file)); blockBlob.PutBlock(blockId, new MemoryStream(file, true), blo

我正在使用c库在AZUREblob存储中上载文件。如果我上传一个字节为[]的文件,它将计算MD5(在AZURE portal中验证-显示CONTENT-MD5值)

我需要上传一个大文件到AZURE。所以我使用PutBlock和PutBlockList方法

string blockHash = GetMd5FromStream(new MemoryStream(file));
blockBlob.PutBlock(blockId, new MemoryStream(file, true), blockHash);
// To commit transaction
blockBlob.PutBlockList(blockIDsBase64);
但是在上面的场景中,CONTENT-MD5在AZURE门户中丢失。我也试过这个

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

但还是没有运气。关于如何解决这个问题有什么想法吗

在以下代码行中:

string blockHash = GetMd5FromStream(new MemoryStream(file));
blockBlob.PutBlock(blockId, new MemoryStream(file, true), blockHash);
// To commit transaction
blockBlob.PutBlockList(blockIDsBase64);
实际上,您正在计算块数据的MD5散列。当存储服务接收到此数据时,它将执行哈希验证以确保块数据未损坏

BlobRequestOptions opt = new BlobRequestOptions();
opt.StoreBlobContentMD5 = true;
UseTransactionalMD5 = true;
blockBlob.PutBlockList(blockIDsBase64, null, opt);
上面的代码没有指示存储服务计算您正在上载的blob的散列。您需要自己计算blob的MD5散列,并将其作为属性的一部分发送,例如:

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

你这样做的原因是什么?我这样问是因为如果你只是复制文件,AZCopy可能会更好up@JasonH我将它用于WebApi。我对另一个技术细节感兴趣-你为什么要逐块上传它?为什么完整的blob上传API(
UploadFromFIle
UploadFromStream
,…)对您不起作用?当您上传一个文件而不将其分块时,SDK会计算MD5哈希值,这就是它存在的原因。如果您将文件分块上传,SDK不会计算哈希值。
blockBlob.Properties.ContentMD5 = "computed hash";
blockBlob.PutBlockList(blockIDsBase64, null, opt);