是否可以创建具有特定文件名的Blob触发的Azure函数?

问题描述 投票:0回答:2

我正在使用C#创建触发器,所以没有明确的function.json文件

   [FunctionName("Function1")]
        public static void Run([BlobTrigger("dev/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");

            if (name=="Test1.xlsx")
            {
                // Any Task that I need to do
            }      

        }

此操作对我而言已成功运行,但我不确定这是否是正确的方法,此方法导致为每个文件触发该函数,然后检查其是否符合条件。

c# azure azure-functions azure-storage-blobs
2个回答
1
投票

是,您可以将某个文件与该文件绑定,它将过滤所有文件,只有指定名称的文件将触发该功能。以下是我的测试:

{
  "bindings": [
    {
      "name": "myBlob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "test/abc123.txt",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

我仅上传一些文件文件,这会触发该功能,因此,如果您仍然有其他错误或问题,请提供更多详细信息或共享您的代码。

enter image description here

更新

[FunctionName("Function1")]
        public static void Run([BlobTrigger("test/123.txt", Connection = "AzureWebJobsStorage")]Stream myBlob, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob \n Size: {myBlob.Length} Bytes");
        }

0
投票

首先,应配置要为其触发功能的Blob的静态路径。例如:在下图中,路径设置为container/file.csv。因此,只要我的Blob容器中有一个名为file.csv的文件container,该Blob触发器就会运行。

enter image description here

这是我的示例功能代码:

public static void Run(Stream myBlob, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob with Size: {myBlob.Length} Bytes");
}

由于您使用的是.NET而不是csx,因此您的代码将如下所示:

[FunctionName("Function1")]
public static void Run([BlobTrigger("container/file.csv", Connection = "AzureWebJobsStorage")]Stream myBlob, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob with Size: {myBlob.Length} Bytes");
}

当我将名为file.csv的文件复制到container时,它会执行该功能。它不会触发任何其他容器中的任何其他文件。完整路径应匹配。

enter image description here

[此外,每个azure函数都有一个function.json文件,这就是用来定义该函数的绑定参数的文件。使用.NET时,如果执行dotnet build并查看构建的bin文件夹,则会看到生成了function.json

功能代码中的唯一问题是您有第二个参数name。仅当您在函数绑定中定义动态路径时才需要此参数,但您不需要这种参数,因为您需要静态的预定义路径。因此,尝试删除第二个参数名称,它应该可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.