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)
我正在使用 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)