【问题标题】:Dynamic output blob storage container names动态输出 blob 存储容器名称
【发布时间】:2020-09-12 11:49:24
【问题描述】:

在为 Azure 函数配置输出 blob 存储容器时,是否可以通过某种方式运行一些代码来生成存储 BLOB 的路径?更准确地说,我想在路径中使用一个新的GUID,每次都会触发这个函数。像这样(代码不起作用):

[FunctionName("BlobTriggered")]        
public static void BlobTriggered(
    [BlobTrigger("myContainer/{name}.{extension}")] Stream myBlob,
    [Blob("myContainer/{Guid.NewGuid()}", FileAccess.Write)] Stream outputContainer,

    string name,
    string extension,
    TraceWriter log)
{
    ...
}

在上面的代码中,我尝试使用Guid.NewGuid() 生成GUID,但这是行不通的。有没有类似的方法可以做到这一点?

【问题讨论】:

  • 由于函数的声明部分的参数必须在编译时固定,我认为你的想法不能使用绑定来完成。但是你可以使用 SDK。我已经发布了答案,请看一下。:)

标签: c# azure azure-functions blob azure-blob-storage


【解决方案1】:

您可以在{}中设置变量,并在声明部分设置相应的参数,从而在属性中获取该值。但是因为函数声明部分的参数必须在编译时固定,所以我认为你的想法不能使用绑定来完成。但是你仍然可以实现你想要的,请看下面的代码,我使用的是 Storage Blob SDK:

using System;
using System.IO;
using Azure.Storage.Blobs;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace FunctionApp53
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([BlobTrigger("samples-workitems/{name}.{extension}", Connection = "str")]Stream myBlob, 
            string name, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
            string connectionString = "DefaultEndpointsProtocol=https;AccountName=0730bowmanwindow;xxx;EndpointSuffix=core.windows.net";
            BlobServiceClient myClient = new BlobServiceClient(connectionString);
            var container = myClient.GetBlobContainerClient("samples-workitems");
            string a = Guid.NewGuid().ToString();
            var blockBlob = container.GetBlobClient(a);
            blockBlob.Upload(myBlob);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2020-04-08
    • 2012-01-17
    相关资源
    最近更新 更多