从Microsoft.Azure.Storage.Blob迁移到Azure.Storage.Blobs-目录概念丢失

问题描述

这些是在不同版本的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也就足够了。