Azure.Storage.Blobs v12.xx 中的 ContentHash 为 null

Cri*_*ian 8 c# azure

我正在尝试将我的项目从Microsoft.WindowsAzure.Storage v9(已弃用)升级到最新的 sdk Azure.Storage.Blobs v12。

我的问题(升级后)是访问ContentHash属性。

升级前步骤:

  1. 将文件上传到 blob
  2. CloudBlob.Properties.ContentMD5Microsoft.WindowsAzure.Storage.Blob获取上传文件的 MD5 哈希值
  3. 将计算出的 MD5 哈希值与从 azure 中检索到的值进行比较

升级后尝试访问 Azure 正在计算的 MD5 哈希值:

1.BlobClient.GetProperties()调用这个方法

2.BlobClient.UploadAsync()BlobContentInfo回复

两者都返回ContentHash为空。(请参阅我后来的问题以了解原因

我注意到的一个巨大差异是,使用较旧的 sdk,我可以告诉存储客户端使用 MD5 计算,如下所示:

CloudBlobClient cloudBlobClient = _cloudStorageAccount.CreateCloudBlobClient();

cloudBlobClient.DefaultRequestOptions.StoreBlobContentMD5 = true;

Run Code Online (Sandbox Code Playgroud)

所以我期待在最新的 sdk 上找到类似于StoreBlobContentMD5 的东西,但我不能。

谁能帮我找到这个问题的解决方案?

编辑 1: 我做了一个测试,在 azure 存储中我没有MD5 哈希

上传代码:

var container = _blobServiceClient.GetBlobContainerClient(containerName);
var blob = container.GetBlobClient(blobPath);

BlobHttpHeaders blobHttpHeaders = null;
if (!string.IsNullOrWhiteSpace(fileContentType))
{
    blobHttpHeaders = new BlobHttpHeaders()
   {
        ContentType = fileContentType,                   
   };                
}

StorageTransferOptions storageTransferOption = new StorageTransferOptions()
     {
          MaximumConcurrency = 2,
     };

var blobResponse = await blob.UploadAsync(stream, blobHttpHeaders, null, null, null, null, storageTransferOption, default);

return blob.GetProperties();
Run Code Online (Sandbox Code Playgroud)

除了使用来自新 sdk 的新类之外,旧的上传代码和新的上传代码没有太大区别。

主要区别仍然是我已经说过的那个,我在StoreBlobContentMD5 的新 sdk 中找不到等效的设置。我认为这就是问题所在。我需要设置存储客户端来计算 MD5 哈希,就像我使用旧 sdk 所做的那样。

编辑 2: 对于下载,我可以执行以下操作:

var properties = blob.GetProperties();
var download = await blob.DownloadAsync(range: new HttpRange(0, properties.Value.ContentLength), rangeGetContentHash: true);
Run Code Online (Sandbox Code Playgroud)

通过使用 DownloadAsync 的这个定义,我可以强制计算 MD5 哈希值,它可以在 download.Value.ContentHash