如何在Azure函数SaaS文件绑定中设置文件夹名称和文件名?

问题描述:

我正在尝试使用SaaS File触发器来侦听FTP站点中的新文件。首先,你甚至可以定义一个变量文件夹,如"path": "inputTest/{folder}/{fileName}"?或者,也许听所有子文件夹中的新文件,并在文件名中包含路径,如inputTest/{file},其中file可能等于"subfolder/fileName.txt"?这里的想法是,我将有多个客户端上传文件到他们自己的目录中,我不想为每个客户端创建一个新的函数/触发器。如何在Azure函数SaaS文件绑定中设置文件夹名称和文件名?

输出结果也一样。我想要一个可以写入各种文件夹的SasS文件绑定。我想我可以使用here描述的方法,但我仍然需要对其进行测试。我的想法是,我想要一次读取一行读取输入文件,以某种方式处理该行,并将其写入另一个文件。本质上是一种变换。可能还有其他方法可以做到这一点,但我希望更好地理解这种绑定。


UPDATE

我试图为输出结合下述:

using System; 
using Microsoft.Azure.WebJobs; 

public static void Run(string input, IBinder output, TraceWriter log) 
{ 
    string connectionStringSetting = Environment.GetEnvironmentVariable(
     "ftp_FTP", EnvironmentVariableTarget.Process); 
    var path = "InputTest/SubFolder/fileName.txt"; 
    log.Info($"Writing to {path}..."); 
    using (var writer = output.Bind<TextWriter>(
     new ApiHubFileAttribute(connectionStringSetting, path))) 
    { 
     writer.Write(input); 
    } 
    log.Info("Done writing..."); 
} 

我包括Microsoft.Azure.WebJobs.Extensions.ApiHub NuGet包为ApiHubFileAttribute。我得到了错误Exception binding parameter 'output'. Microsoft.Azure.WebJobs.Extensions.ApiHub: Unsupported type:Microsoft.Azure.WebJobs.IBinder。任何帮助,将不胜感激。

+0

当使用'IBinder'时,你不应该在你的'function.json'文件中为该参数设置映射参数。这就是你遇到错误的原因。 – mathewc

+0

不支持基于添加到根文件夹的子文件夹中的文件的文件触发器,并且您需要在每个子文件夹上具有不同的函数/触发器。 –

SaaS文件触发器绑定不处理对变量子路径的监视。路径表达式的格式必须为folder/{fileName},文件组件只会绑定到该特定文件夹中的单个文件,而不是子文件夹。文件名之前的静态路径可以包括子文件夹,例如, folder/subFolder/{fileName}

您可以按照您描述的方式使用IBinder来编写一个或多个文件。这应该工作。

+0

文件观察器在该文件夹内查找新文件的频率如何? – DBueno

+0

默认值是90秒,但您可以通过'pollIntervalInSeconds'属性在您的绑定中进行配置。函数门户网站不公开,你必须通过高级编辑器来设置它。 – mathewc

+0

我删除了'out'绑定并得到以下内容:'2016-09-27T15:45:23.898函数启动(Id = 8db8fc1e-69de-4094-9bd4-a90a64ad0199) 2016-09-27T15:45:23.914写入InputTest/SubFolder/fileName.txt ... 2016-09-27T15:45:24.008函数完成(失败,Id = 8db8fc1e-69de-4094-9bd4-a90a64ad0199) 2016-09-27T15:45:24.039执行异常函数:Functions.BlogTriggerOutputTest。 mscorlib:异常已被调用的目标抛出。 mscorlib:给定的键不在字典中。 ' – DBueno