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