Написание триггеров в стиле SQL или привязка действий к событиям в Azure стало проще. С помощью функциональных приложений я могу написать фрагмент кода, который будет запускаться в определенное время или при наступлении определенного события. Событием может быть файл, добавленный в OneDrive или хранилище BLOB-объектов. Эти функции Azure могут вызывать другие функции Azure. Таким образом, вы можете загрузить изображение в большой двоичный объект, а Функция может обрезать его и вставить в другое хранилище больших двоичных объектов.

Вот как я это сделал…

Найдите функциональное приложение на торговой площадке.

Создайте приложение-функцию, предоставив несколько основных сведений, таких как

Как только ваше приложение развернуто и запущено, вы можете добавить к нему новую функцию. Нажмите на приложение на панели инструментов (если вы его закрепили) и нажмите на новую функцию. Это вызывает список шаблонов функций. Я использовал шаблон C# BlobTrigger.

Выбрав шаблон, прокрутите вниз и заполните несколько деталей. Нажмите «Создать» и выберите учетную запись хранения, которую вы использовали при создании приложения.

Как только вы нажмете «Создать», откроется редактор кода, в котором вы можете добавить свой код. Однако перед этим мы должны добавить хранилище BLOB-объектов. Для этого найдите учетные записи хранения, перейдите в хранилище, которое мы только что создали для этого приложения, и добавьте два хранилища BLOB-объектов — оригиналы и миниатюры.

Теперь вернитесь в функциональное приложение и нажмите на вкладку «Интеграция». Здесь мы создадим отображение. Параметры триггера почти установлены, однако я изменил имя.

Затем я добавил выходной параметр для привязки к созданному мной миниатюрному двоичному объекту. Нажмите «Новый вывод», выберите «Блоб-объект хранилища Azure» и измените имя и путь на thumbnails/{name}. Обязательно используйте правильное имя для выходного контейнера BLOB-объектов!

Поскольку мы собираемся вызывать новые Cognitive Services, нам понадобится Ключ API компьютерного зрения, а затем добавьте этот код в свою функцию.

using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
public static void Run(Stream inputBlob, Stream thumbnailBlob, TraceWriter log)
{
    string SubscriptionKey = "YourCognitiveServiceKey";
using (var httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", SubscriptionKey);
        using (HttpContent content = new StreamContent(inputBlob))
        {
            string url = "https://api.projectoxford.ai/vision/v1.0/generateThumbnail"
            content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/octet-stream");
            var uri = url + "?width=300&height=300&smartCropping=true";
            var response = httpClient.PostAsync(uri, content).Result;
            var responseBytes = response.Content.ReadAsByteArrayAsync().Result;
//write to output thumb
            thumbnailBlob.Write(responseBytes, 0, responseBytes.Length);
        }
    }
}

Когда вы сохраните код, вы должны увидеть в журнале сообщение «Компиляция выполнена успешно». Теперь загрузка в «исходный» блоб должна привести к тому, что миниатюра будет вставлена ​​в блоб миниатюр!