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

C# 如何从Azure Storage获取指定每页条数的分页Blob结果

Azure Blob 存储指定页大小分页查询实现

你当前调用的无参GetBlobs()方法使用SDK默认分页配置,单页最多返回5000条Blob,不会自动按你需要的6-7条拆分,要实现目标效果直接按以下方式调整即可:

核心调整逻辑

Azure Blob SDK的GetBlobs方法提供了支持pageSizeHint参数的重载,该参数会给服务端传递单页返回条目数的建议值,服务端会返回数量接近该值的结果(浮动范围1-2条,传6即可满足你6-7条/页的需求),配合AsPages()方法即可实现手动控制分页。


方案1:保持原有返回Pageable<BlobItem>签名(最小改动)

只需要修改GetBlobs调用逻辑,传入页大小参数即可,后续调用方枚举时会自动按指定大小分页:

public Pageable<BlobItem> GetBlobsFromContainer(Guid studentId, int pageSize = 6)
{
    var containerClient = GetBlobContainerClient(studentId.ToString());
    return containerClient.GetBlobs(
        traits: BlobTraits.None,
        states: BlobStates.None,
        prefix: string.Empty,
        pageSizeHint: pageSize
    );
}

调用方按页遍历示例:

Pageable<BlobItem> blobResult = GetBlobsFromContainer(yourStudentId);
// 按页枚举,每页包含6-7条Blob
foreach (Page<BlobItem> page in blobResult.AsPages())
{
    // 处理当前页的Blob集合
    foreach (BlobItem item in page.Values)
    {
        // 你的业务逻辑
    }

    // 需要手动翻页时保存该令牌,下次查询传入即可定位到下一页
    string nextPageToken = page.ContinuationToken;
    // 令牌为空表示已经到最后一页
    if (string.IsNullOrEmpty(nextPageToken)) break;
}

方案2:封装单页查询方法(直接返回单页结果)

如果需要手动控制翻页流程,可以封装成直接返回单页数据的方法,通过continuation token翻页:

/// <param name="continuationToken">分页令牌,首次查询传null,后续翻页传入上一页返回的令牌</param>
public (IReadOnlyList<BlobItem> PageItems, string NextToken) GetSingleBlobPage(
    Guid studentId, 
    int pageSize = 6, 
    string continuationToken = null)
{
    var containerClient = GetBlobContainerClient(studentId.ToString());
    Pageable<BlobItem> pageableBlobs = containerClient.GetBlobs(
        traits: BlobTraits.None,
        states: BlobStates.None,
        prefix: string.Empty,
        pageSizeHint: pageSize
    );

    // 取指定令牌对应的单页结果
    Page<BlobItem> currentPage = pageableBlobs
        .AsPages(continuationToken: continuationToken, pageSizeHint: pageSize)
        .First();

    return (currentPage.Values, currentPage.ContinuationToken);
}

注意事项

  • pageSizeHint是服务端参考值,不是强制硬限制,实际返回条目数会在你传入值的基础上小幅浮动,刚好匹配你需要的6-7条/页的场景
  • 不要直接对Pageable<BlobItem>调用ToList()、Count()等方法,这类操作会自动枚举所有分页拉取全量Blob,失去分页效果
  • 如果需要过滤Blob,可以给prefix参数传入文件名前缀,实现指定前缀Blob的分页查询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:39:16