private static CloudBlobContainer MakeContainer(BlobTransferInfo config) { var creds = new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(config.Account, config.Key); var blobStorage = new CloudBlobClient(new Uri(config.AccountUrl), creds); var container = blobStorage.GetContainerReference(config.Container); return(container); }
public Response CloudCloudTransfer( BlobTransferInfo btiSource, BlobTransferInfo btiDestination, TransferUnitEnum transferUnit) { var Resp = new Response(); try { var containerSource = MakeContainer(btiSource); var containerDestination = MakeContainer(btiDestination); //*************************** var toDateTime = DateTime.UtcNow.AddMinutes(validityPeriodInMinutes); var policy = new SharedAccessBlobPolicy { Permissions = SharedAccessBlobPermissions.Read, SharedAccessStartTime = null, SharedAccessExpiryTime = new DateTimeOffset(toDateTime) }; //*************************** switch (transferUnit) { case TransferUnitEnum.Block: var blobSourceBlock = containerSource.GetBlockBlobReference(btiSource.Blob); var sasBlock = blobSourceBlock.GetSharedAccessSignature(policy); var blobDestinationBlock = containerDestination.GetBlockBlobReference(btiDestination.Blob); Resp.TaskId = blobDestinationBlock.StartCopyFromBlob(new Uri(blobSourceBlock.Uri.AbsoluteUri + sasBlock)); break; case TransferUnitEnum.Page: var blobSourcePage = containerSource.GetPageBlobReference(btiSource.Blob); var sasPage = blobSourcePage.GetSharedAccessSignature(policy); var blobDestinationPage = containerDestination.GetPageBlobReference(btiDestination.Blob); Resp.TaskId = blobDestinationPage.StartCopyFromBlob(new Uri(blobSourcePage.Uri.AbsoluteUri + sasPage)); break; } Resp.ResultStatus = Response.ResultStatusEnum.OK; } catch (Exception ex) { Resp.ResultStatus = Response.ResultStatusEnum.EXCEPTION; Resp.ExceptionMessage = ex.Message; } return(Resp); }
//********************************************************************* /// /// <summary> /// /// </summary> /// <param name="config"></param> /// <param name="progressCallback"></param> /// <param name="speedChangeCallback"></param> /// <returns></returns> /// //********************************************************************* //*** NOTE * Network public AzureAdminClientLib.Response UploadFileToCloud(BlobTransferInfo config, ProgressFileCallbackDelegate progressCallback, SpeedChangeDelegate speedChangeCallback) { var resp = new AzureAdminClientLib.Response(); _PFCBD = progressCallback; _SCD = speedChangeCallback; _OverwriteDestination = config.OverwriteDestination; _SourceFileLength = config.LocalFile.Length; var pivot = config.LocalFile.FullName.LastIndexOf('\\'); var sourceLocation = config.LocalFile.FullName.Substring(0, pivot); var theFilePatterns = new List <string>(1) { config.LocalFile.FullName.Substring(pivot + 1) }; var destinationLocation = config.Url.AbsoluteUri; var destinationStorageKey = config.Key; var rem = config.LocalFile.Length % PAGEBLOBCHUNCKSIZE; Microsoft.WindowsAzure.Storage.Blob.BlobType theUploadBlobType; if (0 == rem) { theUploadBlobType = Microsoft.WindowsAzure.Storage.Blob.BlobType.PageBlob; } else { theUploadBlobType = Microsoft.WindowsAzure.Storage.Blob.BlobType.BlockBlob; } var ShouldTransferSnapshots = false; var ShouldExcludeNewer = false; var ShouldExcludeOlder = false; var FileIncludedAttributes = new System.IO.FileAttributes(); var FileExcludedAttributes = new System.IO.FileAttributes(); var ShouldOnlyFilesWithArchiveBits = false; var ShouldRecursive = false; var ShouldFakeTransfer = false; object TagData = resp; if (0 == config.TransferThreadCount) { config.TransferThreadCount = Environment.ProcessorCount * 8; } ConfigureServicePointManager(config.TransferThreadCount); var transferOptions = new BlobTransferOptions { Concurrency = GetTransferThreadCount(config.TransferThreadCount), OverwritePromptCallback = new BlobTransferOverwritePromptCallback(this.OverwritePromptCallback) }; transferOptions.AppendToClientRequestId(GetAzCopyClientRequestID()); BlobTransferRecursiveTransferOptions recursiveTransferOptions = null; using (var transferManager = new BlobTransferManager(transferOptions)) { try { recursiveTransferOptions = new BlobTransferRecursiveTransferOptions { DestinationKey = destinationStorageKey, TransferSnapshots = ShouldTransferSnapshots, ExcludeNewer = ShouldExcludeNewer, ExcludeOlder = ShouldExcludeOlder, IncludedAttributes = FileIncludedAttributes, ExcludedAttributes = FileExcludedAttributes, OnlyFilesWithArchiveBit = ShouldOnlyFilesWithArchiveBits, UploadBlobType = theUploadBlobType, FilePatterns = theFilePatterns, Recursive = ShouldRecursive, FakeTransfer = ShouldFakeTransfer, MoveFile = config.DeleteSource, FileTransferStatus = null }; transferManager.GlobalCopySpeedUpdated += new EventHandler <BlobTransferManagerEventArgs>(this.SpeedChangeCallback); transferManager.GlobalDownloadSpeedUpdated += new EventHandler <BlobTransferManagerEventArgs>(this.SpeedChangeCallback); transferManager.GlobalUploadSpeedUpdated += new EventHandler <BlobTransferManagerEventArgs>(this.SpeedChangeCallback); } catch (Exception ex) { resp.ResultStatus = Response.ResultStatusEnum.EXCEPTION; resp.ExceptionMessage = "Exception in UploadFileToCloud() during setup : " + CmpInterfaceModel.Utilities.UnwindExceptionMessages(ex); } try { transferManager.QueueRecursiveTransfer(sourceLocation, destinationLocation, recursiveTransferOptions, StartCallback, ExceptionCallback, StartFileCallback, ProgressFileCallback, FinishFileCallback, TagData); } catch (Exception ex) { resp.ResultStatus = Response.ResultStatusEnum.EXCEPTION; resp.ExceptionMessage = "Exception in UploadFileToCloud() during queue up : " + CmpInterfaceModel.Utilities.UnwindExceptionMessages(ex); } transferManager.WaitForCompletion(); return(resp); } }