Estoy activando un Azure Function con HTTP POST y me gustaría guardar el cuerpo de la solicitud en un Blob. Según la documentación, esto debería ser relativamente sencillo utilizando el enlace de almacenamiento de salida Blob. Sin embargo, no pude hacerlo funcionar. Cuando verifico el function.json generado automáticamente, noto que no se ha creado ningún enlace para la salida.

La siguiente función está funcionando, pero me gustaría saber qué me falta con respecto al enlace de salida Blob. ¿Cómo cambiaría esto para usar el enlace de salida de Blob?

public static class SaveSubContent
{
    [FunctionName("SaveSubContent")]
    public static IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
        ILogger log, ExecutionContext context
        )
    {
        var config = new ConfigurationBuilder()
                        .SetBasePath(context.FunctionAppDirectory)
                        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
                        .AddEnvironmentVariables()
                        .Build();

        var connectionString = config["AzureWebJobsStorage"];

        string containerName = "france-msgs";
        string blobName = Guid.NewGuid().ToString() + ".json";


        BlobContainerClient container = new BlobContainerClient(connectionString, containerName);
        container.CreateIfNotExists();

        BlobClient blob = container.GetBlobClient(blobName);

        blob.Upload(req.Body);

        log.LogInformation("Completed Uploading: " + blobName);
        return new OkObjectResult("");
    }
}
0
Matt 4 mar. 2021 a las 01:19

1 respuesta

La mejor respuesta

Puede simplificar esto bastante usando el enlace de salida junto con la expresión de enlace especial {rand-guid}. {rand-guid} generará una guía para usted como parte del enlace, por lo que no tiene que hacerlo en código.

public static class Function1
{
    [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        [Blob("france-msgs/{rand-guid}.json", FileAccess.ReadWrite, Connection = "AzureWebJobsStorage")] CloudBlockBlob outputBlob,
        ILogger log)
    {
        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        await outputBlob.UploadTextAsync(requestBody);

        return new OkObjectResult("");
    }
}
1
Bryan Lewis 4 mar. 2021 a las 00:22