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

Node.js获取Azure Blob容器文件名列表返回空数组问题求助

问题分析与解决方案:Azure Blob文件名列表返回空数组

你遇到的问题出在遍历blob对象的逻辑错误上,我来帮你拆解问题点,再给出修正后的代码:

错误点解析

  1. 错误的条件判断:你写的if (blobsJSON[i] == "name")是把整个blob对象(比如{"name": "xxx", ...})和字符串"name"做比较,这永远不会成立,所以blobsArr.push()根本不会执行。
  2. 未定义的变量:代码里用了blobsJSON[i][key],但key变量从来没有被定义过,即使条件成立,这里也会报错。
  3. 冗余的嵌套循环:每个blob对象已经明确有name属性,不需要用for-in遍历所有属性来找它。

修正后的代码

我们可以用更简洁的数组map方法直接提取文件名,或者修正原来的循环逻辑:

方法1:使用数组map(推荐,更简洁)

listContainerBlobs = async (blobDirName) => {
  return new Promise((resolve, reject) => {
    const blobService = azureStorage.createBlobService(azureStorageConfig.accountName, azureStorageConfig.accountKey);
    blobService.listBlobsSegmentedWithPrefix(`${azureStorageConfig.containerName}`, `${blobDirName}`, null, (err, data) => {
      if (err) {
        reject(err);
      } else {
        // 直接从每个blob对象中提取name属性,生成数组
        const blobsArr = data.entries.map(blob => blob.name);
        resolve({ blobsArr });
      }
    });
  });
};

方法2:修正原有的for循环

如果你更习惯用传统的for循环,也可以改成这样:

listContainerBlobs = async (blobDirName) => {
  return new Promise((resolve, reject) => {
    const blobService = azureStorage.createBlobService(azureStorageConfig.accountName, azureStorageConfig.accountKey);
    blobService.listBlobsSegmentedWithPrefix(`${azureStorageConfig.containerName}`, `${blobDirName}`, null, (err, data) => {
      if (err) {
        reject(err);
      } else {
        const blobsArr = [];
        const blobsJSON = data.entries;
        for(let i = 0; i < blobsJSON.length; i++){
          // 直接访问每个blob对象的name属性
          blobsArr.push(blobsJSON[i].name);
        }
        resolve({ blobsArr });
      }
    });
  });
};

验证结果

用修正后的代码,你会得到预期的文件名数组:

["WKRVAR000241/site_inst_files/avatar002.png"]

这样你就可以把这个数组传入删除、下载等后续方法中使用了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:48:06