【问题标题】:Migrating from Microsoft.Azure.Storage.Blob to Azure.Storage.Blobs - directory concepts missing从 Microsoft.Azure.Storage.Blob 迁移到 Azure.Storage.Blobs - 缺少目录概念
【发布时间】:2021-02-05 08:37:24
【问题描述】:

这些是在不同版本的 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-storage


    【解决方案1】:

    Azure Blob 存储中没有物理目录或文件夹之类的东西。您有时看到的目录是 blob 的一部分(例如 folder1/folder2/file1.txt)。 List Blobs requests 允许您在调用中添加前缀和分隔符,Azure 门户和 Azure 数据资源管理器使用它们来创建文件夹的可视化。例如前缀 folder1/ 和分隔符 / 将允许您查看内容,就像打开 folder1 一样。

    这正是您的代码中发生的情况。 GetDirectoryReference() 添加了一个前缀。 ListBlobs() 触发一个请求,Any() 检查是否有任何项目返回。

    对于 V12,允许您执行相同操作的命令是 GetBlobsByHierarchy 及其异步版本。在您只想知道目录中是否存在任何 blob 的特定情况下,带有前缀的 GetBlobs 也足够了。

    【讨论】:

    • 但 CloudBlobDirectory 是旧 api 的一部分。你的答案在新的 api 中没有对应的吗?
    • 我的回答是 GetBlobsByHierarchy 是等价的,尽管它需要您自己定义更多参数,我在帖子中对此进行了解释。
    猜你喜欢
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多