2016-09-23 36 views
0

我正在嘗試使用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

不支持基於添加到根文件夾的子文件夾中的文件的文件觸發器,並且您需要在每個子文件夾上具有不同的函數/觸發器。 –

回答

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