2017-08-15 6 views
1

たくさんの入力画像をひとつの背の高い画像にまとめて出力ブロブに保存する関数を書いています。キュートリガーからの可変数の入力にバインドする方法はありますか?私はオプションin the docsを見て持っていたし、私の現在の考え方は、私が許可されていると思いますCloudBlobContainer[Blob]属性を使用することですAzure関数 - キュートリガーからブロブのリストを束縛する

{ 
    "inputIds": [1001, 1002, 1003, 1004], // Input blobs "inputs/1001.jpg", etc. 
    "outputId": 15      // Output blob "output/15.jpg" 
} 

[FunctionName("stitch")] 
public static async Task Run(
    [QueueTrigger("stitch")]QueueItem queueItem, 
    [Blob("inputs")]CloudBlobContainer inputContainer, 
    [Blob("results/{outputId}.jpg")]CloudBlockBlob output) 
{ 
    IList<CloudBlockBlob> inputs = await GetBlobsAsync(inputContainer, queueItem.InputIds); 
    Stream result = ConcatImages(inputs); 
    await output.UploadFromStreamAsync(result); 
} 

は、ここでの例のキュー項目です

この場合、QueueItemはカスタムクラスであり、GetBlobsAsync()ConcatImages()は実装可能な関数です。

しかし、私はIEnumerable<CloudBlockBlob>(またはIEnumerable<Stream>)に直接バインドすることができ、そしてどのように私は[Blob]入力属性を記述しますので、もし?

EDIT:入力ブロブのすべての内容を同時にメモリにロードせずに済ませることができますか?私はそれらを一度に一つずつ流す必要があります。

答えて

1

あなたのアーキテクチャが間違っていることをお勧めします。

キュートリガーを正しく使用しているようですが、ペイロードQueueItemがイメージングステッチングタスクの範囲を定義していますが、入力BLOBストレージにバインドするのはなぜですか? inputBlobは、inputIdsをループしながらコード内で動的に取得する必要があります。これを行うと、同時にすべての入力ブロブをメモリに格納することに対するその他の懸念も解決されます。

関連する問題