如何通过BlobContainerClient仅获取容器根目录下的Blob?
仅获取Azure Blob容器根目录下的Blob
要实现只获取容器根目录的Blob,避免返回子文件夹中的内容,你可以利用GetBlobsAsync方法的delimiter参数,让服务端直接过滤结果,减少返回的payload大小,无需在客户端做大量过滤。
Azure Blob存储中的“文件夹”是虚拟概念,依赖路径中的/作为分隔符。当你指定delimiter: "/"时,API会只返回根目录的Blob以及虚拟文件夹的前缀条目,再通过IsPrefix属性就能区分出实际的根目录Blob。
修改后的代码示例:
var blobs = _blobContainerClient.GetBlobsAsync( BlobTraits.Metadata, BlobStates.None, prefix: "", delimiter: "/" ); await foreach (var blobItem in blobs) { // 排除虚拟文件夹条目,只处理根目录的Blob if (!blobItem.IsPrefix) { // 这里写你的Blob处理逻辑 Console.WriteLine($"根目录Blob: {blobItem.Name}"); } }
原理说明
delimiter: "/":告诉Blob存储服务按/分割路径,只返回根层级的内容,不会递归遍历子文件夹。IsPrefix属性:标记当前条目是虚拟文件夹(true)还是实际Blob(false),通过这个判断就能筛选出根目录的Blob。
这种方式是服务端层面的过滤,相比客户端过滤能显著减少网络传输的数据量,尤其当Blob数量增长后,优势会更明显。
内容的提问来源于stack exchange,提问作者smoksnes
相关产品推荐
相关产品推荐

