我正在尝试将我的项目从Microsoft.WindowsAzure.Storage v9(已弃用)升级到最新的 sdk Azure.Storage.Blobs v12。
我的问题(升级后)是访问ContentHash属性。
升级前步骤:
CloudBlob.Properties.ContentMD5从Microsoft.WindowsAzure.Storage.Blob获取上传文件的 MD5 哈希值升级后尝试访问 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
总结一下结束问题:
我用最新版本的12.4.4 blob存储包做了一个快速测试,我可以看到content-md5是自动生成的并且也可以读取。
根据操作员的评论,这可能是由于现有解决方案存在一些问题。创建新的解决方案后,它会按预期工作。
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |