azure 函数 c# http 触发 blob 输出

aum*_*joa 6 c# azure-storage-blobs azure-functions azure-functions-core-tools

有人可以描述我如何配置使用 HTTP 输入触发器和 blob 存储输出触发器的 C# azure 函数吗?

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

chr*_*ris 17

这是一个带有输出 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);
}
Run Code Online (Sandbox Code Playgroud)

它使用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 上时,您将在包含实际连接字符串的函数应用中创建一个设置。

本地设置.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",

    "StorageConnectionString": "UseDevelopmentStorage=true"
  }
}
Run Code Online (Sandbox Code Playgroud)