我正在使用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
}
}
此操作对我而言已成功运行,但我不确定这是否是正确的方法,此方法导致为每个文件触发该函数,然后检查其是否符合条件。
是,您可以将某个文件与该文件绑定,它将过滤所有文件,只有指定名称的文件将触发该功能。以下是我的测试:
{
"bindings": [
{
"name": "myBlob",
"type": "blobTrigger",
"direction": "in",
"path": "test/abc123.txt",
"connection": "AzureWebJobsStorage"
}
]
}
我仅上传一些文件文件,这会触发该功能,因此,如果您仍然有其他错误或问题,请提供更多详细信息或共享您的代码。
更新:
[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");
}
首先,应配置要为其触发功能的Blob的静态路径。例如:在下图中,路径设置为container/file.csv
。因此,只要我的Blob容器中有一个名为file.csv
的文件container
,该Blob触发器就会运行。
这是我的示例功能代码:
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
时,它会执行该功能。它不会触发任何其他容器中的任何其他文件。完整路径应匹配。
[此外,每个azure函数都有一个function.json文件,这就是用来定义该函数的绑定参数的文件。使用.NET时,如果执行dotnet build
并查看构建的bin文件夹,则会看到生成了function.json
。
功能代码中的唯一问题是您有第二个参数name
。仅当您在函数绑定中定义动态路径时才需要此参数,但您不需要这种参数,因为您需要静态的预定义路径。因此,尝试删除第二个参数名称,它应该可以正常工作。