public ActionResult SetMetadata(int blocksCount, string fileName, long fileSize, int fileIndex) { var container = CloudStorageAccount.Parse( ConfigurationManager.AppSettings["StorageConnectionString"]).CreateCloudBlobClient() .GetContainerReference(Request.RequestContext.HttpContext.User.Identity.Name); container.CreateIfNotExists(); var fileToUpload = new CloudFile() { BlockCount = blocksCount, FileName = fileName, Size = fileSize, BlockBlob = container.GetBlockBlobReference(fileName), StartTime = DateTime.Now, IsUploadCompleted = false, UploadStatusMessage = string.Empty, FileKey = "CurrentFile" + fileIndex.ToString(), FileIndex = fileIndex }; Session.Add(fileToUpload.FileKey, fileToUpload); return Json(new { success = true, index = fileIndex }); }
private JsonResult UploadCurrentChunk(CloudFile model, byte[] chunk, int id) { using (var chunkStream = new MemoryStream(chunk)) { var blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes( string.Format(CultureInfo.InvariantCulture, "{0:D4}", id))); try { model.BlockBlob.PutBlock( blockId, chunkStream, null, null, new BlobRequestOptions() { RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(10), 3) }, null); return null; } catch (StorageException e) { Session.Remove(model.FileKey); model.IsUploadCompleted = true; model.UploadStatusMessage = "Failed to Upload file. Exception - " + e.Message; return Json(new { error = true, isLastBlock = false, message = model.UploadStatusMessage, index = model.FileIndex }); } } }
private ActionResult CommitAllChunks(CloudFile model) { model.IsUploadCompleted = true; bool errorInOperation = false; try { var blockList = Enumerable.Range(1, (int)model.BlockCount).ToList<int>().ConvertAll(rangeElement => Convert.ToBase64String(Encoding.UTF8.GetBytes( string.Format(CultureInfo.InvariantCulture, "{0:D4}", rangeElement)))); model.BlockBlob.PutBlockList(blockList); var duration = DateTime.Now - model.StartTime; float fileSizeInKb = model.Size / 1024; string fileSizeMessage = fileSizeInKb > 1024 ? string.Concat((fileSizeInKb / 1024).ToString(CultureInfo.CurrentCulture), " MB") : string.Concat(fileSizeInKb.ToString(CultureInfo.CurrentCulture), " KB"); model.UploadStatusMessage = string.Format(CultureInfo.CurrentCulture, "File uploaded successfully. {0} took {1} seconds to upload", fileSizeMessage, duration.TotalSeconds); _photosRepository.InsertOrUpdate(new Photo { Name = model.FileName, Notes = model.FileName, Url = model.BlockBlob.Uri.ToString(), UserId = Request.RequestContext.HttpContext.User.Identity.Name }); _photosRepository.Save(); } catch (StorageException e) { model.UploadStatusMessage = "Failed to Upload file. Exception - " + e.Message; errorInOperation = true; } finally { Session.Remove(model.FileKey); } return Json(new { error = errorInOperation, isLastBlock = model.IsUploadCompleted, message = model.UploadStatusMessage, index = model.FileIndex, url = model.BlockBlob.Uri }); }