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

Azure Storage Blobs GetBlobs方法异常排查(容器路径均正确)

问题解决:Azure Blob SDK 12.14 遍历Blob循环无迭代且返回空集合

核心问题分析

  • 未将实例对象加入结果集合:循环内创建了EvaluationImage实例,但未调用images.Add(img)将其加入列表,这是返回空集合、导致调用方出现空引用错误的直接原因。
  • 可空参数未做判空处理:customer为可空类型,直接访问customer.AzureFolderName或customer.CompanyName会在customer为null时触发空引用异常,代码未覆盖该场景。
  • 前缀匹配需验证一致性:Azure Blob存储路径大小写敏感,需确认customer.AzureFolderName的值与Blob路径中的对应部分完全一致(示例中为robsonpty)。

修改后的代码

public async Task<List<EvaluationImage>> GetImagesFromVirtualFolder(CompanyDataDto? customer)
{
    var images = new List<EvaluationImage>();
    // 先做判空处理,避免空引用异常
    if (customer == null || string.IsNullOrEmpty(customer.AzureFolderName))
    {
        return images;
    }
    
    var imageFolderPrefix = $"publicfiles/images/{customer.AzureFolderName}/";
    var containerClient = new BlobContainerClient(ConnectionSettings.PrimaryConnection,
       ContainerSettings.MainAppContainer);

    try
    {
        await foreach (var blob in containerClient.GetBlobsAsync(prefix: imageFolderPrefix))
        {
            var filename = blob.Name;
            var img = new EvaluationImage
            {
                ImageUrl = $"{containerClient.Uri.AbsoluteUri}/{filename}",
                ImageCaption = GetCaptionFromFilename(filename),
                IsPosterImage = filename.Contains("poster"),
                ImagesForCompany = customer.CompanyName
            };
            // 关键:将实例对象添加到结果集合
            images.Add(img);
        }
    }
    catch (RequestFailedException ex)
    {
        Log.Logger.Error(ex.Message);
        throw;
    }

    return images;
}

额外验证步骤

  1. 确认customer.AzureFolderName的值与Blob路径中的文件夹名称完全一致(注意大小写)。
  2. 检查连接字符串权限:确保ConnectionSettings.PrimaryConnection对应的账号拥有Blob读取权限(即使容器公开,SDK调用仍需有效权限)。
  3. 可在循环内添加日志输出blob.Name,确认是否有Blob被正常遍历到,排查前缀匹配是否准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:45:30