Streaming a file into Azure Storage via Azure Web Apps and ASP.NET Web API

TL;DR

Get a Memory stream of the file from HTTP Request Context, then use the Azure Storage Async APIs to stream it into the cloud.

The Code

ASP.Net Web API doesn't have the same upload mechamism that ASP.Net MVC does but you can get a very similar experience by using the MultipartMemoryStreamProvider and grabbing any file upload via a Form Post to the WebAPI.

public async Task UploadFileAsync()
{
    var provider = new MultipartMemoryStreamProvider();
    await this.Request.Content.ReadAsMultipartAsync(provider);

    //stream the file into azure storage
    this.storageProvider.Configure($"production{id}");
    var stream = await provider.Contents[0].ReadAsStreamAsync();
    await this.storageProvider.AddFileAsync(stream, model.Name);
}

The method the storageprovider calls then is below, tied into the upload from stream method available from the Azure Storage Blob API.

public async Task AddFileAsync(Stream inputStream, string destintation)
{
    CheckConfigured();

    var blob = this.blobContainer.GetBlockBlobReference(destintation);

    blob.DeleteIfExists();

    await blob.UploadFromStreamAsync(inputStream);
}