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

如何使用Azure.Storage.Blobs枚举大型Azure BLOB容器?

使用Azure.Storage.Blobs借助续传令牌枚举大型Blob容器的代码示例

在Azure.Storage.Blobs SDK中,AsyncPageable<BlobItem>提供了分页枚举能力,虽然GetBlobsAsync方法没有直接暴露续传令牌参数,但可以通过AsPages()方法手动控制分页并获取/传入续传令牌,实现大型容器的断点续扫。

完整代码示例

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;

public static async Task ScanBlobsWithContinuation()
{
    // 替换为你的存储连接字符串和容器名称
    string storageConnectionString = "your-storage-connection-string";
    string containerName = "target-container";

    BlobContinuationToken continuationToken = null;
    // 可选:从之前保存的位置恢复续传令牌
    // string savedToken = File.ReadAllText("continuation-token.txt");
    // continuationToken = BlobContinuationToken.Deserialize(savedToken);

    var containerClient = new BlobContainerClient(storageConnectionString, containerName);

    do
    {
        // 获取当前分页的Blob数据及续传令牌
        var currentPage = await containerClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, continuationToken)
            .AsPages()
            .FirstOrDefaultAsync();

        if (currentPage == null) break;

        // 处理当前页的Blob项
        foreach (var blob in currentPage.Values)
        {
            Console.WriteLine($"Blob: {blob.Name} | 大小: {blob.Properties.ContentLength} bytes");
            // 这里添加自定义业务逻辑
        }

        // 更新续传令牌
        continuationToken = currentPage.ContinuationToken;

        // 可选:将续传令牌保存到本地文件,用于后续断点恢复
        if (continuationToken != null)
        {
            string tokenJson = continuationToken.Serialize();
            File.WriteAllText("continuation-token.txt", tokenJson);
        }

    } while (continuationToken != null);

    Console.WriteLine("Blob枚举完成");
}

断点续扫说明

如果需要从中断的位置继续扫描,只需读取之前保存的续传令牌字符串,反序列化后传入即可:

// 读取保存的续传令牌
string savedToken = File.ReadAllText("continuation-token.txt");
BlobContinuationToken restoredToken = BlobContinuationToken.Deserialize(savedToken);

// 传入restoredToken到GetBlobsAsync的AsPages方法,即可从断点处继续枚举

关键要点

  • AsPages()方法支持传入BlobContinuationToken,是实现断点续扫的核心
  • BlobContinuationToken的Serialize()和Deserialize()方法可将令牌转为字符串持久化,方便断点恢复
  • 每次分页返回的Page<BlobItem>包含当前页的Blob列表和下一页的续传令牌,直到令牌为null时表示枚举完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:15:43