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

Azure Functions隔离进程:如何从BlobInput获取CloudBlobContainer写入Blob

在Azure Functions隔离模式中操作Blob容器写入数据

在隔离托管模式下,Azure Functions的绑定系统不再直接返回CloudBlobContainer这类旧版Storage SDK对象(Microsoft.Azure.Storage.Blob),而是通过简化的输入输出绑定处理数据。如果需要向Blob容器写入新文件,推荐使用新版Azure.Storage.Blobs SDK直接操作,步骤如下:

1. 安装依赖包

首先安装官方的Blob存储SDK:

Install-Package Azure.Storage.Blobs

2. 通过依赖注入配置BlobServiceClient

在隔离模式中,推荐通过依赖注入注入BlobServiceClient,避免重复创建客户端实例,提升连接复用效率:

修改Program.cs配置依赖注入

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Azure.Storage.Blobs;

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        // 从配置读取存储连接字符串,注入单例BlobServiceClient
        services.AddSingleton(x => new BlobServiceClient(
            x.GetRequiredService<IConfiguration>()["StateStorageConnectionString"]));
    })
    .Build();

host.Run();

3. 修改函数实现写入逻辑

移除不需要的[BlobInput]绑定(若无需读取现有Blob内容),通过注入的BlobServiceClient获取目标容器,完成Blob写入操作:

using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;

namespace sample
{
    public class SampleFunctionApp
    {
        private readonly ILogger _logger;
        private readonly BlobServiceClient _blobServiceClient;

        // 构造函数注入BlobServiceClient
        public SampleFunctionApp(ILoggerFactory loggerFactory, BlobServiceClient blobServiceClient)
        {
            _logger = loggerFactory.CreateLogger<SampleFunctionApp>();
            _blobServiceClient = blobServiceClient;
        }

        [Function("SampleFunctionApp")]
        public async Task Run([EventHubTrigger("eventhubname", Connection = "conn-string")] string[] input,
        FunctionContext context)
        {
            _logger.LogInformation($"First Event Hubs triggered message: {input[0]}");

            // 获取目标容器(不存在则自动创建)
            var blobContainerClient = _blobServiceClient.GetBlobContainerClient("your-target-container");
            await blobContainerClient.CreateIfNotExistsAsync();

            // 创建Blob客户端,指定唯一文件名
            var blobClient = blobContainerClient.GetBlobClient($"event-data-{Guid.NewGuid()}.txt");

            // 将EventHub消息写入Blob
            var contentBytes = Encoding.UTF8.GetBytes(input[0]);
            using var contentStream = new MemoryStream(contentBytes);
            await blobClient.UploadAsync(contentStream, new BlobHttpHeaders { ContentType = "text/plain" });

            _logger.LogInformation($"Successfully wrote message to blob: {blobClient.Uri}");
        }
    }
}

关键说明

  • 隔离模式不支持直接绑定到CloudBlobContainer,旧版Microsoft.Azure.Storage.Blob SDK已被官方弃用,推荐使用Azure.Storage.Blobs SDK完成所有Blob操作。
  • BlobServiceClient是线程安全的,通过依赖注入单例管理可复用连接池,提升函数运行性能。
  • 若需读取现有Blob内容,仍可使用[BlobInput]绑定获取字符串/流,但写入操作必须通过SDK实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:25:16