如何通过名称后缀查找Azure存储Blob而不枚举整个容器?

Eug*_*kov 5 c# azure azure-storage azure-blob-storage

Azure 虚拟目录中存在大量 blob:

VirtualDirectory1/file1
VirtualDirectory1/file2
...
VirtualDirectory1/fileN
...
VirtualDirectoryK/file1
VirtualDirectoryK/file2
...
VirtualDirectoryK/fileM
Run Code Online (Sandbox Code Playgroud)

我需要一种快速的方法来查找以特定后缀(例如“file1”)结尾的所有 blob 。至于前缀,有一种方法可以只获取以某个名称开头的 blob:

blobContainer.ListBlobs(prefix: "prefixHere")
Run Code Online (Sandbox Code Playgroud)

以下获取具有特定后缀的blob 的方法会导致获取完整容器及其在客户端上的过滤。

var blobsFound =
    blobContainer
    .ListBlobs(useFlatBlobListing: true)
    .OfType<ICloudBlob>()
    .Where(b => b.Name.EndsWith("file1"))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

可以清楚地看到使用Fiddler抓取流量:

提琴手输出

有没有一种方法可以在 Azure 端按后缀查找所有 Blob,而无需将 Blob 的完整列表获取到客户端?

Gau*_*tri 3

有没有一种方法可以在 Azure 端按后缀查找所有 Blob,而无需将 Blob 的完整列表获取到客户端?

很不幸的是,不行。Blob 服务仅支持按 Blob 前缀过滤,不支持按后缀过滤。您唯一的选择是列出 blob,然后进行客户端过滤。