【问题标题】:Azure function with blobtrigger - update metadata带有 blobtrigger 的 Azure 函数 - 更新元数据
【发布时间】:2020-01-08 16:00:07
【问题描述】:

我正在寻找用于在上传 Blob 元数据时更新它的示例或 IP。感谢所有帮助。

我有以下功能:

public static void Run([BlobTrigger("types/{name}", Connection = "StorageConnection")]Stream myBlob, string name, ILogger log)
{
}

【问题讨论】:

    标签: azure-functions azure-blob-storage


    【解决方案1】:

    您可以使用触发器来获取ICloudBlob 而不是流。
    检查 Azure Functions 的 blob 触发器上的 official documentation

    基本上,您的代码将如下所示:

    public static void Run(
        [BlobTrigger("types/{name}", Connection = "StorageConnection")] ICloudBlob myBlob, 
        string name, 
        ILogger log)
    {
        if (blobTrigger.Metadata.ContainsKey("MyKey"))
            return;
    
        blobTrigger.Metadata["MyKey"] = "MyValue";
        await blobTrigger.SetMetadataAsync();
    }
    

    但是有一个问题。更新元数据后,您基本上是在再次上传 blob,这反过来又会再次触发您的函数。

    我添加了一个简单的检查以查看我的元数据密钥是否已添加以避免无限循环。
    当然,您可能有自己的方式知道您是否是刚刚更新元数据的人。在最坏的情况下,您必须使用自己的标志来指示上传是从您的函数发生的。

    希望对您有所帮助。 :)

    【讨论】:

    • 您是否必须查询特定的 blob?没有办法直接编辑当前的blob吗?我希望从性能的角度来看,我能直接引用当前的 blob。
    • 哦,我想我误解了你的问题。您可以使用 ICloudBlob 作为触发器绑定,这将使您能够访问 Blob 本身,然后您可以将其保存在容器中,或者您可以简单地使用输出绑定来保存它。我会更新答案。
    • 用更简单的方法更新了答案。如果它不适合你,请告诉我。
    • 我真的很喜欢这段代码。然而,刚刚对其进行了测试,我得到了无限循环的确切问题。我会尝试深入研究它。在我的示例中,元数据在上传时就在那里。所以我得到了确切的情况:(
    • 我试过了,得到了这个美丽。绑定到流就好了。 [2021-10-14T02:22:45.470Z] Microsoft.Azure.WebJobs.Host:错误索引方法“BlobTriggerFunction”。 Microsoft.Azure.WebJobs.Host:无法将参数“cloudBlob”绑定到类型 ICloudBlob。确保绑定支持参数类型。如果您正在使用绑定扩展(例如 Azure 存储、ServiceBus、计时器等),请确保您已在启动代码中调用了扩展的注册方法(例如 builder.AddAzureStorage()、builder.AddServiceBus( )、builder.AddTimers() 等)。
    猜你喜欢
    • 2019-08-12
    • 2017-09-06
    • 2018-09-23
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2020-12-10
    • 2019-02-08
    相关资源
    最近更新 更多