Azure Blob 存储 - container.GetBlobsByHierarchyAsync - 未返回结果

Azure Blob Storage - container.GetBlobsByHierarchyAsync - not returning result

我正在使用 Azure Blob 存储容器,该容器在内部和存放文件的地方有许多假文件夹结构。

我正在尝试使用此代码块获取层次值和 blob,以便我可以 return 将它们用于调用方法。

private async Task<List<BlobItem>> ListBlobsHierarchicalListing(
    BlobContainerClient container,
    string prefix)
{
    var list = new List<BlobItem>();

    var resultSegment =
        await container.GetBlobsByHierarchyAsync(prefix: prefix, delimiter: "/").ToListAsync();

    // A hierarchical listing may return both virtual directories and blobs.
    foreach (BlobHierarchyItem blobhierarchyItem in resultSegment)
    {
        if (blobhierarchyItem.IsPrefix)
        {
            // Write out the prefix of the virtual directory.
            this.logger.LogDebug("Virtual directory prefix: {0}", blobhierarchyItem.Prefix);

            // Call recursively with the prefix to traverse the virtual directory.
            list.AddRange(await this.ListBlobsHierarchicalListing(container, blobhierarchyItem.Prefix));
        }
        else
        {
            // Write out the name of the blob.
            this.logger.LogDebug("Blob name: {0}", blobhierarchyItem.Blob.Name);
            list.Add(blobhierarchyItem.Blob);
        }
    }

    return list;
}

我看过这个 link ,其中同样的问题很明显并已解决。然而,

var resultSegment = await container.GetBlobsByHierarchyAsync(prefix: prefix, delimiter: "/").ToListAsync(); 没有得到我需要的东西。根据示例,container.GetBlobsByHierarchyAsync(prefix: prefix, delimiter: "/").AsPages() 也没有。 return 和空 \0 值都可以工作。

我有我的容器,我找到了这个并且正在传入。

前缀是lesmis/24601/images

容器名为 films,我要查找的文件是 image.png

我正在使用 nuget 版本 12.11.0,据说这个问题或与此类似的问题已得到修复 https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md

我还回去尝试了所有其他以前的 nuget 版本,并且在存在此方法的地方仍然得到相同的结果。

如有任何帮助,我们将不胜感激。

我能够正确获取数据。这是我使用的代码:

private static async Task<List<BlobItem>> ListBlobsHierarchicalListing(
    BlobContainerClient container,
    string prefix)
{
    var list = new List<BlobItem>();

    var resultSegment =
        container.GetBlobsByHierarchyAsync(prefix: prefix, delimiter: "/");

    // A hierarchical listing may return both virtual directories and blobs.
    await foreach (BlobHierarchyItem blobhierarchyItem in resultSegment)
    {
        if (blobhierarchyItem.IsPrefix)
        {
            // Write out the prefix of the virtual directory.

            // Call recursively with the prefix to traverse the virtual directory.
            list.AddRange(await ListBlobsHierarchicalListing(container, blobhierarchyItem.Prefix));
        }
        else
        {
            // Write out the name of the blob.
            list.Add(blobhierarchyItem.Blob);
        }
    }

    return list;
}

我对你的代码做了两处修改:

var resultSegment =
        await container.GetBlobsByHierarchyAsync(prefix: prefix, delimiter: "/").ToListAsync();

已更改为

var resultSegment =
    container.GetBlobsByHierarchyAsync(prefix: prefix, delimiter: "/");

foreach (BlobHierarchyItem blobhierarchyItem in resultSegment)

已更改为

await foreach (BlobHierarchyItem blobhierarchyItem in resultSegment)