我正在编写一个函数将大量输入图像拼接成一个高图像,并将其保存到输出blob。有没有办法绑定到队列触发器的可变数量的输入?
这是一个示例队列项:
{
"inputIds": [1001, 1002, 1003, 1004], // Input blobs "inputs/1001.jpg", etc.
"outputId": 15 // Output blob "output/15.jpg"
}
我已经查看了选项in the docs,我目前的想法是在[Blob]
上使用CloudBlobContainer
属性,我认为这是允许的:
[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]
输入属性?
编辑:我可以在不同时将所有输入blob内容加载到内存中的情况下这样做吗?我需要一次流一个。
答案 0 :(得分:1)
我建议你的架构是错误的。
您似乎正在正确使用队列触发器和有效负载QueueItem,它定义了成像拼接任务的范围,但为什么要绑定到输入blob存储?当您遍历inputIds时,需要在代码中动态获取输入blob。这样做还可以解决您在内存中同时拥有所有输入blob的其他问题。