如何使用SAS URL或查询字符串在Python中访问Azure存储中的文件
问题1:Azure存储连接字符串的标准格式
Azure存储连接字符串分两种常用类型,格式如下:
- 包含账户访问密钥的通用连接字符串
格式:DefaultEndpointsProtocol=<http/https>;AccountName=<存储账户名称>;AccountKey=<存储账户访问密钥>;EndpointSuffix=core.windows.net
其中EndpointSuffix是Azure公共云的固定后缀,如果你使用的是Azure中国区、政府区等其他云环境,需要替换为对应环境的后缀。 - 包含SAS令牌的连接字符串
如果不想泄露账户全权限的密钥,可以使用SAS拼连接字符串,格式为:FileEndpoint=https://<存储账户名称>.file.core.windows.net/;SharedAccessSignature=<SAS查询字符串,需去掉开头的?>
如果你需要同时访问 blob、队列等其他存储服务,补充对应服务的Endpoint字段即可。
问题2:可以直接使用现有SAS URL或SAS查询字符串访问Azure文件,无需拼接连接字符串
你可以直接使用现有凭证构造客户端访问文件存储,操作步骤如下:
- 首先安装对应Python SDK:
pip install azure-storage-file-share - 两种调用方式任选其一即可:
- 方式1:直接使用完整SAS URL构造客户端
from azure.storage.fileshare import ShareClient # 填入你拿到的完整SAS URL sas_url = "https://devlifemoorstorage.file.core.windows.net/varamptest?st=2021-06-24T09%3A03%3A48Z&se=2021-08-31T09%3A03%3A00Z&sp=rl&sv=2018-03-28&sr=s&sig=hrBBwAZ8xCy4Nuf7YibsUaQdKwcy3hOoXbUZzRkdyLw%3D" share_client = ShareClient.from_share_url(sas_url) # 示例:列举当前文件共享下的所有文件和目录 for item in share_client.list_directories_and_files(): print(item.name) - 方式2:使用SAS查询字符串构造客户端
from azure.storage.fileshare import ShareClient account_name = "devlifemoorstorage" share_name = "varamptest" # 注意去掉SAS查询串开头的? sas_token = "st=2021-06-24T09%3A03%3A48Z&se=2021-08-31T09%3A03%3A00Z&sp=rl&sv=2018-03-28&sr=s&sig=hrBBwAZ8xCy4Nuf7YibsUaQdKwcy3hOoXbUZzRkdyLw%3D" share_client = ShareClient( account_url=f"https://{account_name}.file.core.windows.net", share_name=share_name, credential=sas_token )
- 方式1:直接使用完整SAS URL构造客户端
注意:你当前持有的SAS权限为rl(仅读+列权限),仅支持读取文件、列举目录操作,无法执行上传、修改、删除等写操作,且该SAS已于2021年8月31日过期,实际使用时请替换为有效期内的有效凭证
内容的提问来源于stack exchange,提问作者Ada
相关产品推荐
相关产品推荐

