Автоматическое создание эскизов или предварительный просмотр изображений при публикации в хранилище blob-объектов Azure

Я размещаю фотографии в хранилище Azure blob. Поскольку я храню изображения с полным разрешением, я хочу сохранить отдельную коллекцию(ы) эскизов(или превью) изображений. Можно ли написать сценарий(или крючок), где при загрузке изображения в хранилище blob миниатюра изображения также автоматически сохраняется.

пожалуйста, сообщите, если есть способ написать это.

Я не хочу делать изменения на стороне клиента или на стороне сервера. Я использование SAS, чтобы позволить клиенту напрямую загружать изображения в хранилище blob. Я могу отправить изображение на мобильный сервис (сервер), на котором я работаю, где изображение может быть изменено и загружено в хранилище blob. Но я не хочу перегружать сервер этими звонками.

2 ответов


Да, это действительно возможно, вы можете сделать это, развернув WebJob с помощью BlobTrigger, который принимает inputstream для вновь созданного blob и позволяет изменить его на выходной blob, код будет выглядеть так, используя отличный imageresizing.net библиотека:

public static void ResizeMicroImages(
        [BlobTrigger("orig/{name}.{ext}")] Stream input,
        [Blob("90x126/{name}.png", FileAccess.Write)] Stream output
){
        ImageBuilder.Current.Build(new ImageJob(input, output, new Instructions()
        {
            AutoRotate = true,
            Width = 90,
            Height = 126,
            OutputFormat = OutputFormat.Png,
        }));
    }

однако в нашей настройке мы видели проблемы, когда мы достигаем много изображений с webjob, выбрасывая OutOfMemoryExceptions, когда он выполняет начальную проверку необработанных сгустков, но это может быть специфичным к нашей установке (у нас есть много фотографий). Мы изменили на ручное добавление сообщения в очередь хранения и вместо этого обработали его с помощью QueueTrigger.


продолжить загрузку в хранилище, а затем отправить событие EventHub. Вы можете реализовать EventProcessor и разместить этот код в рабочей роли. EventProcessor может получить загруженное изображение из хранилища, сделать изменение размера и сохранить измененные изображения обратно в хранилище. Преимущество этой модели является масштабируемым, вы можете масштабировать вверх или вниз по мере изменения трафика.