微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从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也就足够了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。