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

无需Azure存储资源管理器,批量下载Azure Blob文件为ZIP的方案咨询

可行替代解决方案

方案1:Azure Function + Blob Storage SDK

自定义程度最高,完全可控打包逻辑与通知触发:

  • 执行步骤:
    1. 创建HTTP或定时触发的Azure Function
    2. 用Azure.Storage.Blobs SDK遍历目标容器下所有Blob
    3. 在Function临时存储或内存中完成文件打包(大文件建议分块处理,避免内存溢出)
    4. 将生成的ZIP文件上传回指定Blob容器
    5. 触发客户端通知:
      • 调用预设的客户端HTTP回调接口,传递ZIP下载链接
      • 用Azure SendGrid发送带下载链接的邮件
      • 通过Azure Notification Hubs向客户端设备推送通知
  • 核心代码片段(C#示例):
    // 初始化Blob服务客户端
    var blobServiceClient = new BlobServiceClient(Environment.GetEnvironmentVariable("AzureWebJobsStorage"));
    var containerClient = blobServiceClient.GetBlobContainerClient("your-target-container");
    
    // 创建ZIP流
    using var zipStream = new MemoryStream();
    using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
    {
        await foreach (var blobItem in containerClient.GetBlobsAsync())
        {
            var blobClient = containerClient.GetBlobClient(blobItem.Name);
            var zipEntry = archive.CreateEntry(blobItem.Name);
            using var entryStream = zipEntry.Open();
            await blobClient.DownloadToAsync(entryStream);
        }
    }
    zipStream.Position = 0;
    
    // 上传ZIP到Blob存储
    var zipBlobClient = containerClient.GetBlobClient("batch-files.zip");
    await zipBlobClient.UploadAsync(zipStream, overwrite: true);
    
    // 触发客户端HTTP回调通知
    using var httpClient = new HttpClient();
    await httpClient.PostAsync("https://your-client-notify-url", 
        new StringContent($"ZIP打包完成,下载链接:{zipBlobClient.Uri}"));
    

方案2:Azure Logic Apps 低代码实现

无需大量编码,通过可视化拖拽完成全流程:

  • 流程步骤:
    1. 选择触发方式:手动触发(按需执行)或定时触发
    2. 添加「Azure Blob Storage - 获取Blob列表」动作,指定目标容器
    3. 添加「压缩文件」动作,将所有Blob加入压缩任务,设置ZIP文件名
    4. 添加「Azure Blob Storage - 创建Blob」动作,将ZIP文件保存到指定容器
    5. 配置通知动作:
      • 用「Office 365 Outlook - 发送邮件」,附上ZIP的SAS下载链接
      • 用「HTTP - 发送POST请求」调用客户端通知接口
      • 用「Microsoft Teams - 发布消息」推送通知到指定团队频道

方案3:Azure Automation Runbook(PowerShell)

适合运维自动化场景,脚本化执行打包与通知:

  • 执行步骤:
    1. 在Azure Automation中创建PowerShell Runbook
    2. 导入Azure.Storage.Blobs模块,通过托管身份或服务主体授权访问Blob存储
    3. 编写脚本遍历Blob、打包为ZIP并上传回存储容器
    4. 添加通知逻辑:用SendGrid发送邮件,或调用HTTP通知接口
  • 核心脚本片段:
    # 连接到Azure存储账户
    $storageContext = New-AzStorageContext -StorageAccountName "your-storage-account" -UseConnectedAccount
    $containerName = "your-target-container"
    $blobs = Get-AzStorageBlob -Container $containerName -Context $storageContext
    
    # 创建临时ZIP文件
    $tempDir = "D:\temp"
    New-Item -Path $tempDir -ItemType Directory -Force | Out-Null
    $zipPath = "$tempDir\batch-files.zip"
    
    # 下载Blob到临时目录并打包
    foreach ($blob in $blobs) {
        $localPath = "$tempDir\$($blob.Name)"
        $blob.ICloudBlob.DownloadFile($localPath)
    }
    Compress-Archive -Path "$tempDir\*" -DestinationPath $zipPath -Force
    
    # 上传ZIP到Blob存储
    Set-AzStorageBlobContent -File $zipPath -Container $containerName -Blob "batch-files.zip" -Context $storageContext -Force
    
    # 生成SAS下载链接并发送邮件通知
    $sasToken = Get-AzStorageBlobSASToken -Container $containerName -Blob "batch-files.zip" -Context $storageContext -Permission r -ExpiryTime (Get-Date).AddDays(7)
    $downloadUrl = "https://your-storage-account.blob.core.windows.net/$containerName/batch-files.zip$sasToken"
    
    Send-MailMessage -To "client@example.com" -From "notify@example.com" -Subject "ZIP打包完成" -Body "下载链接:$downloadUrl" -SmtpServer "smtp.sendgrid.net" -Credential (Get-AutomationPSCredential "SendGridCred") -Port 587 -UseSsl
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:10:31