使用Azure JavaScript SDK获取存储容器指定子文件夹的Blob列表
解决Azure Storage JS SDK获取特定子文件夹文件列表的问题
嘿,我明白你的问题了!你现在用listBlobsByHierarchy只拿到了根目录下的文件夹前缀,是因为没指定要遍历的目标路径。咱们来调整一下代码就能拿到指定文件夹里的文件列表啦~
核心问题分析
你当前的代码调用listBlobsByHierarchy("/")时没有设置prefix参数,所以SDK只会返回容器根目录下的所有前缀(也就是那些ID命名的文件夹)和根目录的直接文件。要深入到某个子文件夹,需要明确指定该文件夹的路径作为prefix。
解决方案1:用listBlobsByHierarchy获取目标文件夹内容
修改代码,在调用方法时传入prefix参数,指定你要访问的文件夹路径:
// 目标文件夹路径,注意末尾要加斜杠 const targetFolder = "5f09b7ab047f9804a861672d/"; for await (const item of containerClient.listBlobsByHierarchy("/", { prefix: targetFolder })) { if (item.kind === "prefix") { console.log(` 子文件夹: ${item.name}`); } else { console.log(` 文件: 名称 - ${item.name}, 最后修改时间 - ${item.properties.lastModified}`); } }
这样就能返回5f09b7ab047f9804a861672d/文件夹下的所有文件和子文件夹(如果有的话)。delimiter参数保持为"/",用来区分文件和文件夹前缀。
解决方案2:直接获取目标文件夹下所有文件(含子文件夹)
如果你不需要区分文件夹,只想拿到该路径下的所有文件(包括嵌套子文件夹里的),可以用listBlobsFlat方法,同样指定prefix:
const targetFolder = "5f09b7ab047f9804a861672d/"; for await (const blob of containerClient.listBlobsFlat({ prefix: targetFolder })) { console.log(`文件: 名称 - ${blob.name}, 最后修改时间 - ${blob.properties.lastModified}`); }
这个方法会返回所有以targetFolder为前缀的Blob,不管它在哪个子层级。
递归遍历所有层级(可选)
如果目标文件夹还有多层子文件夹,想递归遍历所有内容,可以写一个简单的递归函数:
async function listAllBlobsInFolder(containerClient, folderPath) { for await (const item of containerClient.listBlobsByHierarchy("/", { prefix: folderPath })) { if (item.kind === "prefix") { console.log(` 进入子文件夹: ${item.name}`); // 递归遍历子文件夹 await listAllBlobsInFolder(containerClient, item.name); } else { console.log(` 文件: 名称 - ${item.name}, 最后修改时间 - ${item.properties.lastModified}`); } } } // 调用函数 await listAllBlobsInFolder(containerClient, "5f09b7ab047f9804a861672d/");
这样就能逐层遍历所有子文件夹和文件了。
内容的提问来源于stack exchange,提问作者MMXX11
相关产品推荐
相关产品推荐

