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

使用@azure/storage-blob上传Blob后立即查询不到文件的问题咨询

Azure Blob上传后立即查询不到文件的问题分析与解决

问题原因

  • 你错误地将onProgress回调中loadedBytes === fileSize作为上传完成的判断依据。这个回调仅表示本地已将所有数据发送至Azure服务,但Azure后台可能还在完成Blob的最终写入、元数据同步等操作,此时Blob并未完全就绪,无法被查询到。
  • uploadData是异步方法,返回一个Promise,只有当这个Promise resolve时,才代表上传操作真正完成。

解决方案

不要依赖onProgress判断上传完成,而是等待uploadData的Promise完成后再执行查询操作。

修正后的代码示例

const sasUrl = generateSasUrl(); // 修正变量名拼写:sassUrl → sasUrl
const azureClient = new ContainerClient(sasUrl).getBlobClient(fileName);

// 等待uploadData完成后再查询文件
try {
  await azureClient.uploadData(file, {
    onProgress: ({ loadedBytes }) => {
      // 这里仅用于展示进度,不作为上传完成的判断
      console.log(`已上传 ${loadedBytes}/${fileSize} 字节`);
    }
  });
  // 上传完成后再调用查询
  const files = await fetchAzureFiles();
  console.log('查询到的文件:', files);
} catch (error) {
  console.error('上传失败:', error);
}

async function fetchAzureFiles() {
  // 修正变量名拼写:accoutnName → accountName
  const containerUrl = `https://${accountName}.blob.core.windows.net/${containerName}`;
  const containerClient = new ContainerClient(containerUrl, new ManagedIdentityCredential(clientId, UAMI_Client_id)); // 修正变量名:UAMI_CLient_id → UAMI_Client_id
  
  // listAdlsFiles返回的是异步迭代器,需要遍历获取所有文件
  const files = [];
  for await (const file of containerClient.listAdlsFiles()) {
    files.push(file);
  }
  return files;
}

额外注意事项

  • 变量名拼写错误:代码中的sassUrl应为sasUrl,accoutnName应为accountName,UAMI_CLient_id应为UAMI_Client_id,这些拼写错误可能导致其他潜在问题。
  • listAdlsFiles是针对启用了分层命名空间的存储账户(ADLS Gen2)的方法,如果你的存储账户未启用分层命名空间,应使用listBlobsFlat或listBlobsByHierarchy方法。
  • 即使等待上传完成后查询,极端情况下可能仍存在毫秒级的同步延迟,但这种情况极少,无需额外处理;若仍有问题,可添加极短的延迟(如100ms)后再查询,但不推荐依赖延迟。

内容的提问来源于stack exchange,提问作者Shubham J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:22:45