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