【问题标题】:azure function c# http trigger blob outputazure function c# http trigger blob output
【发布时间】:2019-11-06 16:10:05
【问题描述】:

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

也许还有一个示例代码 sn-p 和一个示例 function.json。我无法使用 azure functions 核心工具在本地工作。

【问题讨论】:

  • 您正在寻找函数 2.x 示例?
  • 是最好的。但如果用 1x 更容易也可以

标签: c# azure-functions azure-blob-storage azure-functions-core-tools


【解决方案1】:

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

(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)

【讨论】:

  • 感谢您的回答。我需要的是这个结合。问题是我无法将“out string myOutputBlob”之类的变量添加到包含 HttpTrigger 的运行函数中。
【解决方案2】:

这是一个带有输出 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"
  }
}

【讨论】:

  • 太棒了,帮了大忙!
  • 我欠你一杯啤酒。
【解决方案3】:

要创建一个保存到 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);
}
 

你需要设置输出绑定:

然后您可以在测试窗口上运行测试发布内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 2018-03-23
    • 1970-01-01
    • 2021-01-04
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多