问题描述
这些是在不同版本的NuGet软件包之间迁移的出色指南: https://github.com/Azure/azure-sdk-for-net/blob/Azure.Storage.Blobs_12.6.0/sdk/storage/Azure.Storage.Blobs/README.md https://elcamino.cloud/articles/2020-03-30-azure-storage-blobs-net-sdk-v12-upgrade-guide-and-tips.html
但是,我正在努力在代码中迁移以下概念:
// Return if a directory exists:
container.GetDirectoryReference(path).ListBlobs().Any();
无法理解GetDirectoryReference且似乎没有直接翻译
此外,CloudBlobDirectory的概念似乎并未纳入Azure.Storage.Blobs,例如
private static long GetDirectorySize(CloudBlobDirectory directoryBlob) {
long size = 0;
foreach (var blobItem in directoryBlob.ListBlobs()) {
if (blobItem is BlobClient)
size += ((BlobClient) blobItem).GetProperties().Value.ContentLength;
if (blobItem is CloudBlobDirectory)
size += GetDirectorySize((CloudBlobDirectory) blobItem);
}
return size;
}
CloudBlobDirectory不在api中的任何位置
解决方法
Azure Blob存储中没有物理目录或文件夹。您有时看到的目录是Blob的一部分(例如folder1/folder2/file1.txt
)。 List Blobs requests允许您在呼叫中添加前缀和定界符,Azure门户和Azure数据资源管理器使用它们来创建文件夹的可视化。例如,前缀folder1/
和定界符/
将使您看到的内容就像打开folder1一样。
这就是代码中发生的事情。 GetDirectoryReference()
添加前缀。 ListBlobs()
触发请求,Any()
检查是否返回任何项目。
对于V12,将允许您使用相同命令的命令将是GetBlobsByHierarchy及其异步版本。在您只想知道目录中是否存在任何Blob的特定问题中,带前缀的GetBlobs也就足够了。