Error binding Blob to IAsyncCollector when binding to output blob in Async method

后端 未结 2 699
野趣味
野趣味 2021-01-15 03:20

I\'m trying to bind to a blob output in an Async method following this post: How can I bind output values to my async Azure Function?

I have multipl

相关标签:
2条回答
  • 2021-01-15 03:42

    You can use the Blob-Binding.

    I preferred this way, because I'm able to specify the ContentType.

     [FunctionName(nameof(Store))]
        public static async Task<IActionResult> Store(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            [Blob(
                "firstcontainer",
                FileAccess.Read,
                Connection = "blobConnection")] CloudBlobContainer blobContainer,
            ILogger log)
        {
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    
            string filename = "nextlevel/body.json";
    
            CloudBlockBlob blob = blobContainer.GetBlockBlobReference($"{filename}");
            blob.Properties.ContentType = "application/json";
            await blob.UploadTextAsync(requestBody);
    
            return (ActionResult)new OkResult();
        }
    
    0 讨论(0)
  • 2021-01-15 03:55

    Collectors are not supported for Blob output bindings, see this issue.

    For variable amount of output blobs (0 or 1 in your case, but can be any), you would have to use imperative bindings. Remove collection binding from your function.json and then do this:

    public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, Binder binder)
    {
        if (req.Method == HttpMethod.Post) 
        {
            string jsonContent = await req.Content.ReadAsStringAsync();
    
            var attributes = new Attribute[]
            {    
                new BlobAttribute("testdata/{rand-guid}.txt"),
                new StorageAccountAttribute("test_STORAGE")
            };
    
            using (var writer = await binder.BindAsync<TextWriter>(attributes))
            {
                writer.Write(jsonContent);
            }
    
            return req.CreateResponse(HttpStatusCode.OK);
        }
        else 
        {
            return req.CreateResponse(HttpStatusCode.BadRequest);    
        }
    }
    
    0 讨论(0)
提交回复
热议问题