You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SAS URL递归下载ADLS2存储Blob目录下的所有文件

递归下载ADLS Gen2 Blob目录(基于SAS URL)

方法1:使用Azure CLI

Azure CLI的az storage blob download-batch命令支持通过SAS token认证,可直接实现递归下载,步骤如下:

  1. 从你的目录SAS URL中拆分核心信息:
    • 存储账户名:提取URL中https://<account-name>.blob.core.windows.net/段的<account-name>
    • 容器名:URL中账户名后的第一个路径段,比如https://xxx.blob.core.windows.net/<container>/dir/...里的<container>
    • 目录前缀:目标目录的完整路径(末尾带/),比如dir/subdir/
    • SAS token:URL中?之后的完整参数串,比如?sv=2023-11-03&ss=bfqt&srt=sco&sp=rwdlacupiytfx&se=2024-...
  2. 执行下载命令:
    az storage blob download-batch \
      --destination /本地目标目录路径 \
      --source <容器名> \
      --account-name <存储账户名> \
      --prefix <目录前缀> \
      --sas-token "<SAS token>" \
      --recursive
    
    该命令会自动遍历指定前缀下的所有Blob,保持原目录结构下载到本地。

方法2:使用Python SDK(azure-storage-blob)

如果需要自定义下载逻辑,可通过Python SDK实现,核心是用SAS URL初始化客户端后递归遍历Blob:

  1. 安装依赖包:
    pip install azure-storage-blob
    
  2. 实现代码:
    from azure.storage.blob import BlobServiceClient
    import os
    
    # 替换为你的目录SAS URL
    sas_url = "https://<account-name>.blob.core.windows.net/<container>/dir/subdir?<sas-token>"
    
    # 拆分SAS URL获取账户地址和token
    account_url, sas_token = sas_url.split('?', 1)
    # 初始化Blob服务客户端
    blob_service_client = BlobServiceClient(account_url=account_url, credential=sas_token)
    
    # 提取容器名和目标目录前缀
    path_parts = account_url.split('/')
    container_name = path_parts[-1]
    prefix = '/'.join(path_parts[4:]) + '/' if len(path_parts) > 4 else ''
    
    container_client = blob_service_client.get_container_client(container_name)
    
    # 遍历并下载所有Blob
    for blob in container_client.list_blobs(name_starts_with=prefix):
        # 构建本地保存路径,保持原目录结构
        local_file_path = os.path.join("/本地目标目录", blob.name)
        # 创建本地目录(如果不存在)
        os.makedirs(os.path.dirname(local_file_path), exist_ok=True)
        # 下载文件
        with open(local_file_path, "wb") as local_file:
            blob_data = container_client.download_blob(blob.name).readall()
            local_file.write(blob_data)
    

关键注意事项

  • 确保你的SAS URL拥有**读取(r)和列出(l)**权限,否则无法遍历目录及下载文件。
  • 若SAS URL为目录级专属,需保证前缀与目标目录完全匹配,避免误下载无关文件。
  • 针对超大型目录,可在SDK中添加分页遍历、多线程下载逻辑提升效率。

内容的提问来源于stack exchange,提问作者sargeMonkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:30:54