如何从Azure Blob容器中批量下载指定名称的文件
可选解决方案
下面提供3种经过验证的可行方案,可根据你的技术栈选择:
方案1:AzCopy批量下载(优先推荐,性能最优)
你之前对AzCopy的能力有误解,它原生支持从本地文本文件读取批量文件名列表,完全可以支撑300个文件的下载需求,不需要逐个传入文件名参数:
- 第一步:将本地300个文件名的清单保存为纯文本文件
filelist.txt,每个文件名单独占一行,不需要额外加容器前缀、存储账户前缀等内容 - 第二步:执行如下AzCopy命令即可完成批量下载:
# 中国区Azure使用该命令 azcopy copy "https://<你的存储账户名>.blob.core.chinacloudapi.cn/<目标容器名>/" "<本地下载保存目录的绝对路径>" --list-of-files ./filelist.txt # 海外Azure使用该命令 azcopy copy "https://<你的存储账户名>.blob.core.windows.net/<目标容器名>/" "<本地下载保存目录的绝对路径>" --list-of-files ./filelist.txt - 注意:如果容器不是公开访问,你可以将SAS令牌直接拼接在容器URL末尾即可,命令会自动并发下载所有清单内的文件,耗时远低于手动循环实现。
方案2:PowerShell实现(适合Windows生态工作流)
如果需要和现有PowerShell自动化流程集成,可以使用Az.Storage模块实现:
- 首先安装依赖模块(已安装可跳过):
Install-Module -Name Az.Storage -Force -AllowClobber - 登录Azure账户(中国区需要加环境参数):
# 中国区登录 Connect-AzAccount -Environment AzureChinaCloud # 海外区登录 Connect-AzAccount - 执行批量下载脚本:
# 读取本地文件名清单 $targetFileList = Get-Content -Path "./filelist.txt" # 初始化存储账户上下文,也可以用SAS令牌初始化 $storageCtx = New-AzStorageContext -StorageAccountName "<你的存储账户名>" -StorageAccountKey "<你的存储账户访问密钥>" # 循环下载目标文件 foreach ($fileName in $targetFileList) { Get-AzStorageBlobContent -Container "<目标容器名>" -Blob $fileName -Destination "<本地保存目录路径>" -Context $storageCtx -Force } - 可选优化:如果需要提升下载速度,可以将串行循环改为并行任务执行,300个文件量级串行执行也可在数分钟内完成。
方案3:Python实现(适合自定义扩展需求)
如果需要在下载前后加入自定义业务逻辑,可以使用Azure官方Python SDK实现:
- 先安装依赖库:
pip install azure-storage-blob - 示例代码:
from azure.storage.blob import BlobServiceClient # 初始化客户端 blob_service_client = BlobServiceClient.from_connection_string("<你的存储账户连接字符串>") container_client = blob_service_client.get_container_client("<目标容器名>") # 读取本地文件名清单 with open("./filelist.txt", "r", encoding="utf-8") as f: target_files = [line.strip() for line in f if line.strip()] # 批量下载 save_dir = "<本地保存目录路径>" for file_name in target_files: blob_client = container_client.get_blob_client(file_name) with open(f"{save_dir}/{file_name}", "wb") as f: f.write(blob_client.download_blob().readall())
内容的提问来源于stack exchange,提问作者John Bull
相关产品推荐
相关产品推荐

