如何通过Python连接Azure容器中仅有权限访问的子文件夹?
仅访问Azure Blob特定子文件夹的Python连接方案
当你的SAS URL直接指向ADLS Gen2容器下的特定子文件夹时,无需使用BlobServiceClient或ContainerClient操作整个容器,DirectoryClient是最适配的工具,以下是具体实现方式:
1. 安装依赖包
先确保安装Azure Storage Blob SDK:
pip install azure-storage-blob
2. 直接用SAS URL初始化DirectoryClient
这是最直接的方式,SAS URL已经包含了子目录的权限信息:
from azure.storage.blob import DirectoryClient # 替换为你的SAS URL sas_url = "https://storageaccount.blob.core.windows.net/container/folder/subfolder?fancy_token" dir_client = DirectoryClient.from_connection_string(conn_str=sas_url) # 列举子目录下的所有Blob for blob_item in dir_client.list_blobs(): print(f"Blob名称: {blob_item.name}") # 上传本地文件到该子目录 local_file_path = "本地文件路径.txt" with open(local_file_path, "rb") as file_data: dir_client.upload_blob(name="上传后的文件名.txt", data=file_data) # 下载子目录中的Blob到本地 downloaded_blob = dir_client.download_blob("目标Blob名称.txt") with open("本地保存路径.txt", "wb") as file_data: downloaded_blob.readinto(file_data)
3. 可选:通过BlobServiceClient派生DirectoryClient
如果需要复用服务客户端实例,也可以用SAS URL初始化BlobServiceClient,再获取目标子目录的客户端:
from azure.storage.blob import BlobServiceClient sas_url = "https://storageaccount.blob.core.windows.net/container/folder/subfolder?fancy_token" service_client = BlobServiceClient.from_connection_string(conn_str=sas_url) # 容器名称和子目录路径需与SAS URL中的对应 dir_client = service_client.get_directory_client(container="container", directory="folder/subfolder") # 后续操作与上述一致,比如列举Blob、上传下载等
注意事项
- 确认SAS令牌拥有目标子目录的对应权限(如
r读、w写、l列举等),权限不足会触发403错误 - 若仅需操作单个Blob,可直接用
BlobClient.from_connection_string(),将SAS URL拼接上目标Blob的完整路径即可
内容的提问来源于stack exchange,提问作者spettekaka
相关产品推荐
相关产品推荐

