How to upload a file to Azure blob and download as stream?

8 Dec 20231 minute to read

The following code snippet shows how to upload an Excel file to Azure blob and download it as stream.

public static class Function1
{
  [FunctionName("Function1")]
  public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log)
  {
    using FileStream uploadFileStream = File.OpenRead("Sample.xlsx");

    var accountName = "Account Name";
    var accountKey = "Account Key";

    StorageSharedKeyCredential sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);

    string blobUri = "https://" + accountName + ".blob.core.windows.net";

    BlobServiceClient blobServiceClient = new BlobServiceClient(new Uri(blobUri), sharedKeyCredential);

    BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient("Container Name");

    var filename = "AzureFile_Upload.xlsx";

    BlobClient blobClientUpload = containerClient.GetBlobClient(filename);
    await blobClientUpload.UploadAsync(uploadFileStream, true);

    MemoryStream readStream = new MemoryStream();
    BlobClient blobClientRead = containerClient.GetBlobClient(filename);
    await blobClientRead.DownloadToAsync(readStream);

    readStream.Position = 0;

    FileStream outputStream = new FileStream("Output.xlsx", FileMode.Create, FileAccess.Write);
    readStream.CopyTo(outputStream);

    return new OkObjectResult("done");
  }
}