我有一个webjob可以调整大小并覆盖blob容器中的同一图像。如何防止Webjob在同一文件上再次触发?我正在使用imageresizer库btw
public class Functions
{
public static void ProcessBlob(
[BlobTrigger("media/{filename}")] Stream input,
[Blob("media/{filename}", FileAccess.Write)] Stream output,
string filename,
ILogger logger)
{
logger.LogInformation("blob path: {0}", filename);
var instructions = new Instructions
{
Width = 1920,
Mode = FitMode.Max,
Scale = ScaleMode.DownscaleOnly,
JpegQuality = 80
};
ImageBuilder.Current.Build(new ImageJob(input, output, instructions));
}
}
答案 0 :(得分:1)
递归方法需要退出条件。
最简单的解决方案是将转换后的文件写入不同的容器,例如media-resized
:
public static void ProcessBlob(
[BlobTrigger("media/{filename}")] Stream input,
[Blob("media-resized/{filename}", FileAccess.Write)] Stream output,
string filename,
ILogger logger) { ... }
另一种选择是写入具有相同后缀(例如:{filename}.1920px.jpg
)的相同容器但写入不同文件,并向函数添加条件以停止处理带有该后缀的文件。
如果您真的要原地升级,那么您也可以set custom "converted" marker in blob metadata进行转换,并让函数在转换前对其进行检查,以避免递归。
请注意,对于最后两个选项,您很可能需要绑定到CloudBlockBlob
而不是Stream
。有关选项,请参见documentation。