Example #1
0
        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));
            }
        }