Написание триггеров в стиле 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); } } }
Когда вы сохраните код, вы должны увидеть в журнале сообщение «Компиляция выполнена успешно». Теперь загрузка в «исходный» блоб должна привести к тому, что миниатюра будет вставлена в блоб миниатюр!