Azure WebJob: остановка триггера при создании / перезаписи большого двоичного объекта в том же контейнере - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть веб-задание, которое изменяет размер и перезаписывает одно и то же изображение в контейнере BLOB-объектов. Как я могу предотвратить повторный запуск веб-задания для того же файла? я использую библиотеку imageresizer кстати

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));
    }
}

1 Ответ

0 голосов
/ 10 сентября 2018

Рекурсивный метод нуждается в условии выхода.

Самое простое решение - записать преобразованные файлы в другой контейнер, например 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) и добавьте условие в свою функцию, чтобы прекратить обработку файлов с этим суффиксом.

Если вы действительно действительно хотите обновить на месте, тогда вы также можете установить пользовательский маркер «преобразованный»в метаданных BLOB-объектов при преобразовании, и пусть функция проверяет их перед преобразованием, чтобы избежать рекурсии.

Обратите внимание, что для последних двух опций вам, скорее всего, нужно связать CloudBlockBlob вместо Stream.См. документацию для вариантов.

...