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

如何在Azure ACI中获取Blob存储文件上传通知并下载至指定目录

实现Azure Blob上传通知并触发ACI下载文件到指定目录

完全可以实现这个需求,以下是两种实用方案,适合Azure新手快速落地:

方案一:事件驱动实时触发(推荐)

利用Azure Event Grid监听Blob上传事件,结合Azure Function处理逻辑,触发ACI内的服务下载文件:

  1. 配置Blob存储的Event Grid事件订阅

    • 登录Azure门户,找到你的Blob存储账户,进入「事件」面板
    • 创建事件订阅,事件类型选择「Blob已创建」(仅监听新上传的文件)
    • 终点类型选择「Azure Function」或「Webhook」:
      • 选Webhook的话,需要你的ACI服务暴露一个HTTP接口,用于接收事件通知并触发下载
      • 选Azure Function的话,后续用Function来处理下载逻辑
  2. 编写事件处理逻辑
    以Azure Function为例,用C#编写处理代码(其他语言同理):

    using Azure.Storage.Blobs;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.EventGrid;
    using Azure.Messaging.EventGrid;
    using Newtonsoft.Json;
    using System.Net.Http;
    using System.IO;
    
    public static async Task Run([EventGridTrigger] EventGridEvent eventGridEvent)
    {
        // 解析Blob上传事件的元数据
        var blobUrl = eventGridEvent.Data["url"].ToString();
        var blobClient = new BlobClient(new Uri(blobUrl));
        
        // 下载Blob内容到临时路径
        var tempPath = Path.Combine(Path.GetTempPath(), blobClient.Name);
        await blobClient.DownloadToAsync(tempPath);
        
        // 方式1:若ACI挂载了Azure Files卷,直接上传到对应共享目录(映射到ACI的c:\data\input)
        // var shareClient = new ShareClient("<Azure Files连接字符串>", "<共享名称>");
        // var fileClient = shareClient.GetRootDirectoryClient().GetFileClient(blobClient.Name);
        // await fileClient.UploadAsync(tempPath);
        
        // 方式2:调用ACI服务的HTTP接口,通知服务自行下载Blob
        using var httpClient = new HttpClient();
        await httpClient.PostAsync("http://<ACI服务IP>:<端口>/api/download", 
            new StringContent(JsonConvert.SerializeObject(new { BlobUrl = blobUrl })));
    }
    
  3. 权限配置

    • 给Azure Function分配Blob存储的「存储Blob数据读取者」角色,或者用SAS令牌访问Blob
    • 如果调用ACI的HTTP接口,确保ACI的网络允许Function访问(比如通过VNet集成)

方案二:直接挂载Blob存储到ACI(更简单)

如果你的场景不需要复杂的事件触发逻辑,可以直接将Blob容器挂载为ACI的只读卷,上传到Blob的文件会直接出现在ACI的c:\data\input目录下,无需手动下载:

  • 创建ACI时,在卷配置中选择「Azure Blob存储」,关联你的SStorageContainer容器,设置挂载路径为c:\data\input
  • 配置ACI使用托管标识或SAS令牌访问Blob存储,确保权限足够
  • 上传到Blob容器的文件会自动同步到ACI的input目录,服务直接读取即可

注意事项

  • 事件驱动方案要考虑重复事件的处理(Event Grid会自动重试,需在服务中做幂等校验)
  • 挂载Blob卷时该卷为只读属性,适合作为input目录;output目录推荐使用Azure Files或可写的Blob容器
  • 尽量让ACI和存储账户处于同一区域,减少延迟和数据传输成本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:33:27