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

如何从Azure存储容器中获取指定文件夹下的Blob并排除子文件夹内容

解决Azure Blob存储中仅获取指定文件夹下直接Blob的问题

刚好我之前处理过一模一样的需求,Azure Blob存储的“文件夹”其实是基于Blob名称的虚拟结构(并没有真正的文件夹实体),所以要精准过滤出指定文件夹下的直接Blob、排除子文件夹内容,关键是正确组合ListBlobs方法的参数:

核心思路

当你设置prefix时,必须配合delimiter参数来区分“虚拟文件夹”和直接Blob,同时通过类型筛选排除文件夹项。

具体实现代码(C#示例)

// 假设你已经初始化好CloudBlobContainer实例
CloudBlobContainer container = GetYourCloudBlobContainer();

// 调用ListBlobs时,注意prefix要以斜杠结尾,同时指定delimiter为"/"
var blobResults = container.ListBlobs(
    prefix: "Folder/",  // 斜杠结尾确保只匹配Folder下的内容,避免误匹配类似FolderXYZ的前缀
    useFlatBlobListing: false,  // 不使用扁平列表,保留层级结构
    delimiter: "/"       // 用斜杠作为分隔符,区分虚拟文件夹和Blob
);

// 筛选出直接在Folder下的Blob(排除CloudBlobDirectory类型的子文件夹)
var targetBlobs = blobResults.OfType<CloudBlockBlob>().ToList();

参数解释

  • prefix: "Folder/":一定要加上结尾的斜杠,否则会匹配所有以Folder开头的Blob(比如FolderSub/image.jpg这种不属于目标文件夹的内容),加斜杠后只会匹配Folder/开头的项,也就是目标文件夹下的内容。
  • delimiter: "/":这个参数会让Azure存储返回两类结果:一是直接在Folder/下的Blob,二是Folder/下的虚拟文件夹(比如Folder/Sub-Folder/),这些虚拟文件夹会以CloudBlobDirectory类型返回。
  • useFlatBlobListing: false:保持默认的层级列表模式,这样才能区分出文件夹和直接Blob。如果设为true,会把所有子文件夹的Blob都扁平返回,不符合你的需求。

验证结果

运行这段代码后,targetBlobs里就只会包含Folder/image1.jpg,而Folder/Sub-Folder/image2.jpg会被排除在外,因为它属于子文件夹Sub-Folder下的内容,不会被包含在直接Blob的结果里。

内容的提问来源于stack exchange,提问作者Cedric

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:54:06