azure function c# http 触发 blob 输出

azure function c# http trigger blob output

谁能告诉我如何配置使用 HTTP 输入触发器和 blob 存储输出触发器的 C# azure 函数?

也许还有示例代码片段和示例 function.json。我无法使用 azure 函数核心工具在本地工作。

您需要的一切都在官方文档页面,

(i) Http and WebHooks

(ii)Output binding blob storage

Http 触发器示例代码

[FunctionName("HttpTriggerCSharp")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] 
    HttpRequest req, ILogger log)

Blob 存储输出绑定

[FunctionName("ResizeImage")]
public static void Run(
    [BlobTrigger("sample-images/{name}")] Stream image,
    [Blob("sample-images-sm/{name}", FileAccess.Write)] Stream imageSmall,
    [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageMedium)

这是一个带有输出 blob 绑定的组合 HTTP 触发函数:

[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"
  }
}

要创建保存到 Blob 存储的 http 函数,请使用此代码:

 #r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log,TextWriter outputBlob)
{
   
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    outputBlob.WriteLine(requestBody);
 
    string result =  "{ 'result':  'ok' }";
    dynamic data = JsonConvert.DeserializeObject(result);
      
    return new OkObjectResult(data);
}
 

您需要设置输出绑定:

然后就可以运行测试发帖内容测试window