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

如何在Azure Blob存储中读取指定子目录内的文件?

只读取Azure Blob存储指定子目录内容的修改方案

核心逻辑

Azure Blob存储的“子目录”是基于Blob名称前缀实现的虚拟结构。要限制只读取2024/Data/下的内容,需通过指定前缀+禁用递归遍历来实现。

修改后的代码

假设你的BlobStorage<T>.GetBlobs()方法支持传入前缀和遍历选项参数,直接调整调用逻辑即可:

var blobStorage = new BlobStorage<Documents>(Environment.GetEnvironmentVariable("AzureStorage"), "documents");

var itemCount = 0;
var maxItems = (31 * 100);
// 目标子目录前缀,必须以"/"结尾
var targetPrefix = "2024/Data/";

// 传入前缀并关闭递归遍历
await foreach (var data in blobStorage.GetBlobs(prefix: targetPrefix, recursive: false))
{    
    // 你的文件信息获取逻辑
    itemCount++;
}

自定义BlobStorage类的补充实现(若需)

如果BlobStorage<T>是你自行封装的类,需要确保内部调用Azure官方SDK时正确传递参数。以下是基于BlobContainerClient的参考实现:

public async IAsyncEnumerable<T> GetBlobs(string prefix = null, bool recursive = true)
{
    var containerClient = new BlobContainerClient(_connectionString, _containerName);
    
    // 使用GetBlobsByHierarchy实现虚拟目录遍历,delimiter设置为"/"区分目录
    var blobHierarchyItems = containerClient.GetBlobsByHierarchy(
        traits: BlobTraits.None,
        states: BlobStates.None,
        prefix: prefix,
        delimiter: recursive ? null : "/",
        cancellationToken: CancellationToken.None
    );

    await foreach (var item in blobHierarchyItems)
    {
        // 仅处理实际Blob文件,跳过虚拟目录项
        if (item.IsBlob)
        {
            // 替换为你将BlobItem转换为Documents类型的逻辑
            yield return MapToDocuments(item.Blob);
        }
    }
}

关键注意点

  • 前缀必须以/结尾:比如2024/Data/,避免误匹配名称以2024/Data开头的其他路径(如2024/DataXYZ/)
  • 关闭递归:通过recursive: false或delimiter: "/",确保只读取目标目录下的直接文件,不遍历深层子目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:41:03