我正在使用c#库在AZURE blob存储中上传文件。如果我用byte[]上传一个文件,它会计算MD5 (在AZURE中验证-显示内容-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);但还是没有运气。对如何解决这个问题有什么想法吗?
发布于 2017-05-29 11:22:09
在以下代码行中:
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);https://stackoverflow.com/questions/44240655
复制相似问题