如何从本地Python脚本上传文件到Azure Blob容器?上传无响应排查
问题分析与解决方案
你的代码核心问题在于容器名称的错误指定,以及部分参数使用不当,导致请求无法正确到达Azure服务,进而出现程序无响应的情况。
错误点拆解
- 容器名称错误:你传入的
container_name是完整的Blob存储路径(https://containerxyz.blob.core.windows.net/a/b/raw/),但Azure SDK要求container_name仅为容器的实际名称(比如示例中的a),路径前缀(b/raw/)需要合并到Blob的名称中。 - 参数使用冲突:第一个代码示例中,
get_blob_client的blob参数错误传入了文件内容contents,而非Blob的名称;同时upload_blob重复传递name参数,导致逻辑冲突。
修正后的代码示例
方式1:使用BlobServiceClient
from azure.storage.blob import BlobServiceClient from azure.identity import DefaultAzureCredential account_url = "https://containerxyz.blob.core.windows.net" default_credential = DefaultAzureCredential() blob_service_client = BlobServiceClient(account_url, credential=default_credential) # 仅传入容器的实际名称 container_name = 'a' # Blob名称包含路径前缀和文件名 blob_name = 'b/raw/test.txt' contents = 'test' # 指定正确的容器和Blob名称 blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name) # 无需传递name参数,直接上传数据 blob_client.upload_blob(data=contents, overwrite=True)
方式2:使用ContainerClient
from azure.storage.blob import BlobServiceClient from azure.identity import DefaultAzureCredential account_url = "https://containerxyz.blob.core.windows.net" default_credential = DefaultAzureCredential() blob_service_client = BlobServiceClient(account_url, credential=default_credential) container_name = 'a' blob_name = 'b/raw/test.txt' data = 'test' container_client = blob_service_client.get_container_client(container=container_name) # 传入包含路径的Blob名称 container_client.upload_blob(name=blob_name, data=data, overwrite=True)
额外排查步骤
如果修正后仍出现无响应情况,可从以下方向排查:
- 凭据有效性:确保本地已通过
az login登录Azure CLI,或已设置正确的环境变量(AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_TENANT_ID),让DefaultAzureCredential能正常获取访问权限。 - 网络连通性:检查运行脚本的环境是否能访问Azure Blob存储端点,可尝试直接访问
account_url确认网络通畅。 - 开启调试日志:添加日志输出,查看请求执行细节,定位卡顿环节:
import logging logging.basicConfig(level=logging.DEBUG)
内容的提问来源于stack exchange,提问作者Mitch
相关产品推荐
相关产品推荐

