繁体   English   中英

绑定到 blobtriggered 函数中的 blob

[英]binding to a blob in blobtriggered function

我们如何绑定到 blob 内的属性?

我的绑定:

    public static async Task Run(
        [BlobTrigger("%triggerContainer%/{name}")] Stream myBlob,
        [Blob("%triggerContainer%/{name}", Read)]  CloudBlockBlob @in,
        [Blob("%outputContainer%/{name}", Write)] CloudBlockBlob @out,
        string name, ILogger log)
    {

我希望能够将 blobtrigger 类型更改为 POCO:

[BlobTrigger("%triggerContainer%/{name}")] MyPoco myBlob

MyPoco可能是这样的:

public class MyPoco
{
   public string id {get;set;}
   public string filename {get;set;}
}

在函数中,我希望能够执行以下操作:

var thisId = myBlob.id;
var thisfileName = myBlob.filename;

我们如何使用 POCO 对象绑定到 blob 的实际内容?

根据这个

JavaScript 和 Java 函数将整个 blob 加载到内存中,如果绑定到字符串、Byte[] 或 POCO,C# 函数会这样做。

首先编写一个 IExtensionConfigProvider 来根据需要注册转换器,

internal class CustomBlobConverterExtensionConfigProvider : IExtensionConfigProvider
{
    public void Initialize(ExtensionConfigContext context)
    {
        context.AddConverter<Stream, MyPoco>(s =>
        {
            // read and convert
            return new MyPoco();
        });

        context.AddConverter<ApplyConversion<MyPoco, Stream>, object>(p =>
        {
            MyPoco value = p.Value;
            var stream = p.Existing;

            TextWriter writer = new StreamWriter(stream);
            // write the value to the stream
            writer.FlushAsync().GetAwaiter().GetResult();

            return null;
        });
    }
}

然后,您在启动时向主机构建器注册此配置提供程序:

var builder = new HostBuilder()
    .ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices()
        .AddAzureStorage()
        .AddExtension<CustomBlobConverterExtensionConfigProvider>();
    })

然后将您的 BlobTrigger 函数绑定到 Mypoco:

public void BlobTrigger([BlobTrigger("test")] Mypoco item, ILogger logger)
{
    // process item
}

有关更多信息,请查看此文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM