public async Task <HttpResponseMessage> Upload() { // Check if the request contains multipart/form-data. if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } string root = HttpContext.Current.Server.MapPath("~/App_Data"); var provider = new MultipartFormDataStreamProvider(root); try { // Read the form data and return an async task. await Request.Content.ReadAsMultipartAsync(provider); var task = Task.Factory.StartNew((fd) => { var blobContainer = AzureHelper.GetBlobContainer("uploadbatch"); var typedFd = fd as Collection <MultipartFileData>; var fileDataQueue = new List <UploadDocumentParameter>(); var batchGuid = Guid.NewGuid().ToString(); foreach (var file in typedFd) { fileDataQueue.Add(new UploadDocumentParameter() { FileName = file.Headers.ContentDisposition.FileName, StreamData = File.ReadAllBytes(file.LocalFileName) }); } var blob = blobContainer.GetBlockBlobReference(batchGuid); var binaryFormatter = new BinaryFormatter(); using (var memoryStream = new MemoryStream()) { binaryFormatter.Serialize(memoryStream, fileDataQueue.ToArray()); memoryStream.Position = 0; var batchBytes = memoryStream.ToArray(); blob.UploadFromByteArray(batchBytes, 0, batchBytes.Length); } AzureHelper.SendQueueMessage(batchGuid, "uploadqueue"); }, provider.FileData); return(Request.CreateResponse(HttpStatusCode.OK)); } catch (Exception e) { return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e)); } }