获取Azure Blob容器内Blob数量时遇InvalidChunkLength错误求助
解决Azure Blob容器Blob数量统计时的
InvalidChunkLength错误 这个错误本质是HTTP连接在流式获取Blob列表时意外中断,通常和网络不稳定、请求超时或Blob数量过大导致的长连接维持失败有关。以下是具体解决方法:
1. 配置请求超时与重试策略
给ContainerClient添加超时设置,并启用重试机制,应对临时网络波动:
from azure.storage.blob import ContainerClient from azure.core.pipeline.policies import RetryPolicy sas_uri = "*************************" # 配置重试策略:最多重试3次,每次间隔递增 retry_policy = RetryPolicy(max_retries=3, retry_backoff_factor=1) # 创建带超时和重试的ContainerClient container_client = ContainerClient.from_container_url( sas_uri, retry_policy=retry_policy, timeout=30 # 单次请求超时时间(秒) ) blobs_count = sum(1 for _ in container_client.list_blobs()) print("Number of blobs in the container:", blobs_count)
2. 分页遍历Blob列表
当容器内Blob数量极大时,一次性流式遍历容易断开连接,改用分页方式逐步获取:
from azure.storage.blob import ContainerClient sas_uri = "*************************" container_client = ContainerClient.from_container_url(sas_uri) blobs_count = 0 # 分页获取,每页最多返回5000个Blob(Azure默认最大值) page_iterator = container_client.list_blobs(results_per_page=5000) for page in page_iterator: blobs_count += len(list(page)) print("Number of blobs in the container:", blobs_count)
3. 基础排查项
- 确认当前网络稳定,无防火墙或代理拦截Azure存储服务请求
- 验证SAS URI包含
list权限(SAS token需带l标识才能列出Blob) - 检查SAS URI是否已过期
4. 升级Azure存储SDK
旧版本SDK可能存在连接管理bug,执行命令升级到最新版:
pip install --upgrade azure-storage-blob
内容的提问来源于stack exchange,提问作者Ashwin Roy
相关产品推荐
相关产品推荐

