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

如何使用Firebase Admin Node.js SDK列出云存储桶中的目录

解决方案

Firebase 存储底层基于Google Cloud Storage,本身是扁平对象存储,不存在真实的目录实体,所有目录都是基于对象key中的/分隔符虚拟出来的。
调用getFiles时传入delimiter: "/"参数后,目录不会出现在第一个返回值的文件数组中,而是会作为公共前缀,存放在接口返回响应的prefixes字段中。你之前只解构了第一个files参数,所以拿不到目录列表;如果根目录下没有直接存储的文件、全是目录的话,拿到的files数组本身就是空的,就会出现你遇到的返回结果为空的现象。


列根目录下的目录与文件

const bucket = admin.storage().bucket("backups");
// 注意返回值解构:第三个元素是原始接口响应,目录数据在这里
const [files, , apiResponse] = await bucket.getFiles({
  prefix: "",
  delimiter: "/",
  maxResults: 100
});
// 根目录下的文件
console.log("文件列表:");
files.forEach(file => console.log(file.name));
// 根目录下的目录
console.log("目录列表:");
const directories = apiResponse.prefixes ?? [];
directories.forEach(dirPath => console.log(dirPath));

列指定子目录下的目录与文件

如果要查询某个子目录下的内容,prefix参数传入子目录路径,必须以/结尾:

// 例如查询 backups 桶下 2024/backup/ 子目录的内容
const [subFiles, , subRes] = await bucket.getFiles({
  prefix: "2024/backup/",
  delimiter: "/",
  maxResults: 100
});
// 子目录下的文件
subFiles.forEach(file => console.log(file.name));
// 子目录下的嵌套目录
const subDirectories = subRes.prefixes ?? [];
subDirectories.forEach(dirPath => console.log(dirPath));

分页拉取全量目录

当目录下内容超过maxResults配置的数量时,需要用pageToken分页拉取:

let allDirectories = [];
let nextPageToken = null;
do {
  const [, , res] = await bucket.getFiles({
    prefix: "",
    delimiter: "/",
    maxResults: 100,
    pageToken: nextPageToken
  });
  allDirectories.push(...(res.prefixes ?? []));
  nextPageToken = res.nextPageToken;
} while (nextPageToken);
console.log("根目录全量目录:", allDirectories);

注意点

  • 不需要传入internal_legacy: true参数,这是Firebase控制台内部接口的专用参数,公开Node.js SDK不识别该参数,传入无意义
  • 查询子目录时prefix必须加结尾斜杠,否则会出现匹配结果不准确的问题
  • 若返回值中prefixes为undefined,代表当前查询路径下没有子目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:27:16