Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        //*********************************************************************
        ///
        /// <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);
            }
        }