2017-02-11 48 views
2

出綁定有例如:如何從Azure函數輸出多個Blob?

ICollector<T> (to output multiple blobs) 

而且也:

Path must contain the container name and the blob name to write to. For example, 
if you have a queue trigger in your function, you can use "path": 
"samples-workitems/{queueTrigger}" to point to a blob in the samples-workitems 
container with a name that matches the blob name specified in the trigger 
message. 

和默認的 「整合」 UI具有默認爲:

Path: outcontainer/{rand-guid} 

但這是不夠的,我取得進展。如果我在C#中編寫代碼,那麼function.json和run.csx的語法是如何將多個blob輸出到容器?

回答

0

有幾種不同的方法可以完成此操作。首先,如果需要輸出的斑點數量爲固定爲,則可以使用多個輸出綁定。

using System; 

public class Input 
{ 
    public string Container { get; set; } 
    public string First { get; set; } 
    public string Second { get; set; } 
} 

public static void Run(Input input, out string first, out string second, TraceWriter log) 
{ 
    log.Info($"Writing 2 blobs to container {input.Container}"); 
    first = "Azure"; 
    second = "Functions"; 
} 

以及相應function.json:

{ 
    "bindings": [ 
    { 
     "type": "manualTrigger", 
     "direction": "in", 
     "name": "input" 
    }, 
    { 
     "type": "blob", 
     "name": "first", 
     "path": "{Container}/{First}", 
     "connection": "functionfun_STORAGE", 
     "direction": "out" 
    }, 
    { 
     "type": "blob", 
     "name": "second", 
     "path": "{Container}/{Second}", 
     "connection": "functionfun_STORAGE", 
     "direction": "out" 
    } 
    ] 
} 

爲了測試上面的,我發送測試JSON有效載荷的功能,和斑點產生:

{ 
    Container: "test", 
    First: "test1", 
    Second: "test2" 
} 

的上面的示例演示瞭如何從輸入中綁定Blob容器/名稱值(通過{Container}/{First}{Container}/{Second}路徑表達式)。你只需要定義一個POCO來捕獲你想要綁定的值。我在這裏使用ManualTrigger是爲了簡單起見,但它也適用於其他觸發器類型。此外,雖然我選擇了綁定到out string類型,可以綁定到任何其他支持的類型:TextWriterStreamCloudBlockBlob

如果需要輸出斑點的數量是變量,那麼你可以使用Binder來強制綁定和寫入功能代碼中的斑點。有關更多詳細信息,請參見here。要綁定到多個輸出,您只需使用該技術執行多個命令式綁定。

FYI:我們的文檔是不正確的,所以我記錄一個錯誤here得到固定,:)

+0

我想的是勢在必行的模式。我得到一個編譯錯誤 - 見下文。 –

+0

//命令式綁定到存儲 blobPath = $「json/{fileNamePart} _ {dateString}」; var attributes = new Attribute [] { new BlobAttribute(blobPath), new StorageAccountAttribute(storageAccount) }; using(var writer = binder.Bind (attributes)){ writer.Write(jsonString.ToString()); } –

+0

錯誤: 2017-02-12T00:43:43.243功能開始(ID = 6d48c79d-5af3-4c9a-b4ab-242d186e7c33) 2017-02-12T00:43:43.243功能編譯錯誤 2017-02- 12T00:43:43.243(225,73):error CS1026:)expected 2017-02-12T00:43:43.243(225,61):error CS1503:Argument 2:無法從'System.Attribute []'轉換爲' System.Attribute' 2017-02-12T00:43:43.243(161,13):警告CS0162:檢測到無法檢測到的代碼 2017-02-12T00:43:43。243(191,17):警告CS0162:檢測到無法檢測到的代碼 2017-02-12T00:43:43.243功能已完成(失敗,Id = 6d48c79d-5af3-4c9a-b4ab-242d186e7c33) –