Это комбинированная функция, запускаемая по протоколу HTTP, с привязкой выходного BLOB-объекта:
[FunctionName("HttpTriggeredFunction")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest httpRequest,
[Blob("blobcontainer", Connection = "StorageConnectionString")] CloudBlobContainer outputContainer,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
await outputContainer.CreateIfNotExistsAsync();
var requestBody = await new StreamReader(httpRequest.Body).ReadToEndAsync();
var blobName = Guid.NewGuid().ToString();
var cloudBlockBlob = outputContainer.GetBlockBlobReference(blobName);
await cloudBlockBlob.UploadTextAsync(requestBody);
return new OkObjectResult(blobName);
}
. Используется тип вывода CloudBlobContainer
для получения ссылки на контейнер BLOB-объектов, который затем позволяет использовать такие методы, как.GetBlockBlobReference("blobPath")
для получения ссылки на BLOB-объект.
Получив ссылку на BLOB-объект, вы можете использовать различные методы для загрузки:
cloudBlockBlob.UploadFromByteArrayAsync()
cloudBlockBlob.UploadFromFileAsync()
cloudBlockBlob.UploadTextAsync()
cloudBlockBlob.UploadFromStreamAsync()
Чтобы запустить его локально, необходимо настроить некоторые параметры.Обратите внимание, что в моем примере атрибут [Blob("blobcontainer", Connection = "StorageConnectionString")]
- "blobcontainer" может быть любым, каким вы хотите, и будет именем контейнера, который будет создан в вашей учетной записи хранения этой строкой
outputContainer.CreateIfNotExistsAsync();
(если он еще не существует). - Connection = "StorageConnectionString", это может быть параметр в
local.settings.json
для строки подключения вашей учетной записи хранения.При локальной разработке я бы порекомендовал установить значение "UseDevelopmentStorage=true"
, чтобы вы могли воспользоваться эмулятором хранилища.Затем, когда вы будете готовы к развертыванию в Azure, вы создадите настройку в приложении-функции, содержащую строку реального соединения.
local.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"StorageConnectionString": "UseDevelopmentStorage=true"
}
}