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

如何在Azure Blob容器中访问虚拟目录并下载子文件夹内文件?

解决Azure C#函数下载Blob容器子文件夹文件报错的问题

问题分析

根目录文件可正常下载,但子文件夹内文件报错,核心原因是Blob名称的路径解析或编码处理不当——Azure Blob存储没有物理文件夹,所谓“子文件夹”是Blob名称包含/分隔符的逻辑路径,若BlobUriBuilder解析出的BlobName存在编码异常(比如%2F未转义为/),就会导致找不到目标Blob。

修复步骤

  • 确保Blob名称正确解码
    修改BlobName的获取逻辑,对解析后的名称进行URL解码,处理转义字符:

    BlobUriBuilder blobUriBuilder = new BlobUriBuilder(fileUri);  
    string containerName = blobUriBuilder.BlobContainerName;
    // 对Blob名称进行URL解码,将%2F转为/
    string blobName = System.Web.HttpUtility.UrlDecode(blobUriBuilder.BlobName); 
    BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
    BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
    BlobClient blobClient = containerClient.GetBlobClient(blobName);
    
    if (!await blobClient.ExistsAsync())
    {
        return new NotFoundObjectResult(new { error = "验证文件名", details = "无法在指定位置找到文件" });
    } 
    BlobDownloadInfo download = await blobClient.DownloadAsync();
    
  • 直接使用Uri构造BlobClient(备选方案)
    若路径解析仍有问题,可跳过BlobUriBuilder,直接用完整fileUri构造BlobClient,避免解析错误:

    // 使用身份凭证构造
    BlobClient blobClient = new BlobClient(new Uri(fileUri), new DefaultAzureCredential());
    // 或使用连接字符串构造(需提前获取containerName和正确的blobName)
    // BlobClient blobClient = new BlobClient(connectionString, containerName, blobName);
    
    if (!await blobClient.ExistsAsync())
    {
        return new NotFoundObjectResult(new { error = "验证文件名", details = "无法在指定位置找到文件" });
    } 
    BlobDownloadInfo download = await blobClient.DownloadAsync();
    
  • 校验传入的fileUri格式
    确认fileUri格式正确,示例格式如下:
    https://<存储账户名>.blob.core.windows.net/<容器名>/子文件夹1/子文件夹2/目标文件.txt

关键注意点

  • Azure Blob存储中不存在实体文件夹,所有“子文件夹”路径都是Blob名称的一部分,比如子文件夹1/子文件夹2/目标文件.txt是完整的Blob名称。
  • 若使用SAS Token访问,需确保Token包含读取(r)权限,且未过期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:33:37