使用Python下载Azure Blob时大文件触发ConditionNotMet错误
Azure Blob大文件下载失败解决方案
问题概况
用Python的azure.storage.blob库的BlobServiceClient下载Azure Blob时,小文件能正常下载,但100MB及以上的大文件(含700MB+文件)下载失败。试过官方文档里的download_to_stream、readinto方法,以及自定义分块写入的代码,都返回相同错误。当前使用的代码:
with open(path, "wb") as file: data = blobclient.download_blob() for stream in data.chunks(): file.write(stream)
可行解决办法
1. 自定义分块大小
默认分块大小可能不适合大文件,手动设置更小的分块(比如4MB),降低单次请求的数据量:
CHUNK_SIZE = 4 * 1024 * 1024 # 4MB分块 with open(path, "wb") as file: blob_data = blobclient.download_blob(chunk_size=CHUNK_SIZE) for chunk in blob_data.chunks(): file.write(chunk)
2. 延长请求超时
大文件下载耗时更长,创建客户端时设置更长的超时时间(比如300秒):
from azure.storage.blob import BlobServiceClient # 初始化BlobServiceClient时设置超时 blob_service_client = BlobServiceClient.from_connection_string( conn_str="你的存储账户连接字符串", timeout=300 ) blobclient = blob_service_client.get_blob_client(container="容器名称", blob="大文件路径") with open(path, "wb") as file: blob_data = blobclient.download_blob() for chunk in blob_data.chunks(): file.write(chunk)
3. 配置重试策略
网络波动容易中断大文件下载,添加重试策略提升容错性:
from azure.storage.blob import BlobClient from azure.core.pipeline.policies import RetryPolicy # 最多重试5次,每次间隔递增 retry_policy = RetryPolicy(max_retries=5, retry_backoff_factor=2) blobclient = BlobClient.from_connection_string( conn_str="你的存储账户连接字符串", container_name="容器名称", blob_name="大文件路径", retry_policy=retry_policy ) with open(path, "wb") as file: blob_data = blobclient.download_blob() for chunk in blob_data.chunks(): file.write(chunk)
4. 升级SDK版本
旧版azure-storage-blob可能存在大文件下载的bug,升级到最新稳定版:
pip install --upgrade azure-storage-blob
5. 排查网络限制
如果在企业内网或受限网络环境下,检查防火墙、代理是否限制了大文件传输,换个网络环境测试。
内容的提问来源于stack exchange,提问作者Rumi
相关产品推荐
相关产品推荐

