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

Azure Blob Storage获取容器Blob内容访问blob.name致崩溃如何解决

故障原因

访问blob.name触发崩溃的核心原因是listBlobsFlat()迭代返回的结果不只有Blob对象:当容器内存在虚拟目录结构、或者存储账号开启了ADLS Gen2分层命名空间时,迭代器会同步返回类型为prefix的虚拟目录项,这类项的结构和标准Blob项不一致,直接读取不存在的name属性就会触发运行时错误。
官方文档的基础示例默认演示的是无目录的纯扁平存储场景,没有加类型判断分支,在有层级结构的容器里运行直接就会报错。

修复代码

直接替换原有循环逻辑,增加类型判断即可:

async function listBlobs(blobServiceClient, containerName) {
    const containerClient = blobServiceClient.getContainerClient(containerName);
    let blobIndex = 1;
    const blobIterator = containerClient.listBlobsFlat();
    
    for await (const item of blobIterator) {
        // 区分返回项类型,只对Blob类型项读取name属性
        if (item.kind === "blob") {
            console.log(`Blob ${blobIndex++}: ${item.name}`);
        } 
        // 不需要处理虚拟目录的话可以直接忽略下面的分支
        else if (item.kind === "prefix") {
            console.log(`检测到虚拟目录前缀: ${item.prefix}`);
        }
    }
}
额外排查项
  • 确认本地安装的@azure/storage-blob SDK为v12+稳定版本,v10及更早版本的返回字段结构和v12版本完全不兼容,跨版本照搬示例代码必然出现字段不存在问题
  • 如果运行后还是报错,可以在循环最开始加console.log(item)打印单条返回项的完整结构,对照实际字段调整读取逻辑即可
  • 开启了分层命名空间的存储账号建议将SDK升级到最新稳定版,旧版本SDK对Gen2账号的兼容存在已知问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 13:15:40