本地Python上传文件至Azure Blob存储遇连接超时错误求助
解决Azure Blob存储Python上传连接超时问题
先梳理下你遇到的问题:代码在创建容器阶段就触发了连接超时,结合错误信息和代码细节,咱们一步步排查解决:
1. 先修正代码中的语法与参数错误
你的代码存在几处明显错误,先调整这些再排查网络问题:
- 导入语句需拆分,且
PublicAccess未导入 create_blob_from_path参数顺序错误,正确顺序是容器名、Blob存储名称、本地文件路径,且一次只能上传单个文件(CSV和PDF需分开调用)
修正后的代码示例:
from azure.storage.blob import BlockBlobService, ContentSettings, PublicAccess # 替换为你的真实存储账户名和密钥 block_blob_service = BlockBlobService(account_name='your_real_account_name', account_key='your_real_account_key') container_name = 'cn1' # 创建容器 block_blob_service.create_container(container_name) # 设置容器公共访问权限 block_blob_service.set_container_acl(container_name, public_access=PublicAccess.Container) # 上传CSV文件 block_blob_service.create_blob_from_path( container_name, 'blob.csv', # Blob在存储中的名称 'C:/uploads/blob.csv', # 本地文件路径 content_settings=ContentSettings(content_type='text/csv') ) # 上传PDF文件 block_blob_service.create_blob_from_path( container_name, 'blob.pdf', # Blob在存储中的名称 'C:/uploads/blob.pdf', # 本地文件路径 content_settings=ContentSettings(content_type='application/pdf') )
2. 排查网络连接基础问题
错误提示显示无法连接到account_name.blob.core.windows.net,先验证网络可达性:
- 打开命令提示符,执行
ping your_real_account_name.blob.core.windows.net(替换为你的真实账户名),检查是否能解析到IP并收到响应 - 尝试用浏览器访问
https://your_real_account_name.blob.core.windows.net,如果无法打开,说明网络层面存在连接障碍
3. 验证存储账户凭据与名称
- 确认
account_name是Azure存储账户的实际账户名(不是显示名称或别名),可在Azure门户存储账户的概览页面查看 - 确认
account_key是有效的访问密钥(可在Azure门户存储账户→访问密钥中复制) - 可以用Azure Storage Explorer工具尝试连接存储账户,验证凭据是否正确,如果工具也无法连接,大概率是凭据或网络规则问题
4. 检查Azure存储账户的网络访问限制
登录Azure门户进入你的存储账户:
- 转到网络选项卡,查看是否设置了防火墙规则或虚拟网络限制
- 如果设置了允许特定IP访问,确保你的本地机器IP在允许列表内;如果是默认的“允许所有网络”,则跳过此步骤
5. 处理代理或企业防火墙限制
如果你在企业网络环境下,可能存在代理或防火墙阻止了Azure Blob服务的访问:
- 检查本地防火墙是否允许出站访问443端口(HTTPS协议)
- 如果使用代理,需在代码中配置代理环境变量:
import os os.environ['HTTP_PROXY'] = 'http://your_proxy_address:port' os.environ['HTTPS_PROXY'] = 'http://your_proxy_address:port'
6. 升级Azure存储SDK版本
你使用的是旧版azure-storage-blob SDK(BlockBlobService属于旧版API),建议升级到最新版,新版本修复了大量网络相关问题:
- 卸载旧版:
pip uninstall azure-storage-blob - 安装新版:
pip install azure-storage-blob - 新版代码示例(推荐使用):
from azure.storage.blob import BlobServiceClient, ContentSettings from azure.storage.blob import PublicAccess connection_string = "DefaultEndpointsProtocol=https;AccountName=your_account_name;AccountKey=your_account_key;EndpointSuffix=core.windows.net" blob_service_client = BlobServiceClient.from_connection_string(connection_string) container_name = "cn1" container_client = blob_service_client.create_container(container_name) container_client.set_container_access_policy(public_access=PublicAccess.Container) # 上传CSV文件 with open("C:/uploads/blob.csv", "rb") as data: blob_client = blob_service_client.get_blob_client(container=container_name, blob="blob.csv") blob_client.upload_blob(data, content_settings=ContentSettings(content_type='text/csv')) # 上传PDF文件 with open("C:/uploads/blob.pdf", "rb") as data: blob_client = blob_service_client.get_blob_client(container=container_name, blob="blob.pdf") blob_client.upload_blob(data, content_settings=ContentSettings(content_type='application/pdf'))
按照以上步骤逐一排查,应该能解决连接超时的问题。
内容的提问来源于stack exchange,提问作者dhinar1991
相关产品推荐
相关产品推荐

