You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出位于第三层未知文件夹中的Azure Blob?

解决方案

Azure Blob存储的prefix参数不支持通配符,只能指定固定路径前缀。要筛选第三层文件夹下的Blob,有两种可行方式:

方式1:全量遍历后过滤(实现简单)

直接列出容器内所有Blob,通过统计Blob名称中/的数量判断层级——第三层文件夹下的Blob名称至少包含3个/(对应folder1/folder2/folder3/file的结构),层级不足的会被排除。

代码示例:

public async Task<List<string>> GetThirdLevelBlobsAsync()
{
    var blobNames = new List<string>();
    // 列出容器内所有Blob,可按需添加BlobStates/BlobTypes参数过滤类型
    await foreach (BlobItem blobItem in _containerClient.GetBlobsAsync())
    {
        int slashCount = blobItem.Name.Count(c => c == '/');
        // 第三层文件夹下的Blob需满足至少3个路径分隔符
        if (slashCount >= 3)
        {
            blobNames.Add($"{_containerClient.Uri.AbsoluteUri}/{blobItem.Name}");
        }
    }
    return blobNames;
}

方式2:分层遍历(性能更优)

如果容器内Blob数量庞大,全量遍历效率较低,可通过GetBlobsByHierarchyAsync逐层遍历到第三层文件夹,再列出该层级下的Blob:

public async Task<List<string>> GetThirdLevelBlobsHierarchicalAsync()
{
    var blobNames = new List<string>();

    // 遍历第一层文件夹(如animal/、car/)
    await foreach (BlobHierarchyItem level1 in _containerClient.GetBlobsByHierarchyAsync(delimiter: "/"))
    {
        if (level1.IsPrefix)
        {
            // 遍历第二层文件夹(如animal/herbivore/、car/electric/)
            await foreach (BlobHierarchyItem level2 in _containerClient.GetBlobsByHierarchyAsync(delimiter: "/", prefix: level1.Prefix))
            {
                if (level2.IsPrefix)
                {
                    // 遍历第三层文件夹(如animal/herbivore/tall/、car/electric/tesla/)
                    await foreach (BlobHierarchyItem level3 in _containerClient.GetBlobsByHierarchyAsync(delimiter: "/", prefix: level2.Prefix))
                    {
                        if (level3.IsPrefix)
                        {
                            // 列出第三层文件夹下的所有Blob
                            await foreach (BlobItem blob in _containerClient.GetBlobsAsync(prefix: level3.Prefix))
                            {
                                blobNames.Add($"{_containerClient.Uri.AbsoluteUri}/{blob.Name}");
                            }
                        }
                    }
                }
            }
        }
    }

    return blobNames;
}

关键注意点

  • prefix参数仅支持固定路径前缀,不允许使用*等通配符;
  • 方式1适合Blob数量较少的场景,实现成本低;方式2避免无效遍历,更适合大规模Blob存储;
  • 统计路径分隔符时,注意Blob名称中是否存在转义的/(通常不会出现)。

内容的提问来源于stack exchange,提问作者Patrick de Jong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:05:34