/// <summary>
        /// Start copy using transfer mangager by source uri
        /// </summary>
        /// <param name="uri">source uri</param>
        /// <param name="destContainer">Destination CloudBlobContainer object</param>
        /// <param name="destBlobName">Destination blob name</param>
        /// <returns>Destination ICloudBlob object</returns>
        private async Task StartCopyInTransferManager(long taskId, IStorageBlobManagement destChannel, Uri uri, CloudBlobContainer destContainer, string destBlobName)
        {
            ValidateContainerName(destContainer.Name);
            ValidateBlobName(destBlobName);
            Dictionary <string, string> BlobPath = new Dictionary <string, string>()
            {
                { "Container", destContainer.Name },
                { "Blob", destBlobName }
            };

            DataMovementUserData data = new DataMovementUserData()
            {
                Data    = BlobPath,
                TaskId  = taskId,
                Channel = destChannel,
                Record  = null
            };

            BlobStartCopyJob startCopyJob = new BlobStartCopyJob()
            {
                SourceUri = uri,
                DestBlob  = destContainer.GetBlockBlobReference(destBlobName)
            };

            await this.EnqueueStartCopyJob(startCopyJob, data);
        }
        /// <summary>
        /// Start copy using transfer mangager by source ICloudBlob object
        /// </summary>
        /// <param name="blob">Source ICloudBlob object</param>
        /// <param name="destContainer">Destination CloudBlobContainer object</param>
        /// <param name="destBlobName">Destination blob name</param>
        /// <returns>Destination ICloudBlob object</returns>
        private async Task StartCopyInTransferManager(long taskId, IStorageBlobManagement DestChannel, ICloudBlob sourceBlob, ICloudBlob destBlob)
        {
            ValidateBlobName(sourceBlob.Name);
            ValidateContainerName(destBlob.Container.Name);
            ValidateBlobName(destBlob.Name);

            Dictionary <string, string> BlobPath = new Dictionary <string, string>()
            {
                { "Container", destBlob.Container.Name },
                { "Blob", destBlob.Name }
            };

            DataMovementUserData data = new DataMovementUserData()
            {
                Data    = BlobPath,
                TaskId  = taskId,
                Channel = DestChannel,
                Record  = null
            };

            BlobStartCopyJob startCopyJob = new BlobStartCopyJob()
            {
                SourceBlob = sourceBlob,
                DestBlob   = destBlob
            };

            await this.EnqueueStartCopyJob(startCopyJob, data);
        }
        protected async Task EnqueueStartCopyJob(BlobStartCopyJob startCopyJob, DataMovementUserData userData)
        {
            await this.RunTransferJob(startCopyJob, userData);

            this.OutputStream.WriteVerbose(userData.TaskId, startCopyJob.CopyId);
            Dictionary <string, string> destBlobPath = userData.Data as Dictionary <string, string>;

            if (destBlobPath != null)
            {
                var destChannel = userData.Channel;
                this.OutputStream.WriteVerbose(userData.TaskId, String.Format(Resources.CopyDestinationBlobPending, destBlobPath["Blob"], destBlobPath["Container"], startCopyJob.CopyId));
                CloudBlobContainer container = destChannel.GetContainerReference(destBlobPath["Container"]);
                ICloudBlob         destBlob  = this.GetDestinationBlobWithCopyId(destChannel, container, destBlobPath["Blob"]);
                if (destBlob != null)
                {
                    this.WriteICloudBlobObject(userData.TaskId, destChannel, destBlob);
                }
            }
        }
        /// <summary>
        /// Start copy using transfer mangager by source uri
        /// </summary>
        /// <param name="uri">source uri</param>
        /// <param name="destContainer">Destination CloudBlobContainer object</param>
        /// <param name="destBlobName">Destination blob name</param>
        /// <returns>Destination ICloudBlob object</returns>
        private async Task StartCopyInTransferManager(long taskId, IStorageBlobManagement destChannel, Uri uri, CloudBlobContainer destContainer, string destBlobName)
        {
            ValidateContainerName(destContainer.Name);
            ValidateBlobName(destBlobName);
            Dictionary<string, string> BlobPath = new Dictionary<string, string>()
            {
                {"Container", destContainer.Name},
                {"Blob", destBlobName}
            };

            DataMovementUserData data = new DataMovementUserData()
            {
                Data = BlobPath,
                TaskId = taskId,
                Channel = destChannel,
                Record = null
            };

            BlobStartCopyJob startCopyJob = new BlobStartCopyJob()
            {
                SourceUri = uri,
                DestBlob = destContainer.GetBlockBlobReference(destBlobName)
            };

            await this.EnqueueStartCopyJob(startCopyJob, data);
        }
        /// <summary>
        /// Start copy using transfer mangager by source ICloudBlob object
        /// </summary>
        /// <param name="blob">Source ICloudBlob object</param>
        /// <param name="destContainer">Destination CloudBlobContainer object</param>
        /// <param name="destBlobName">Destination blob name</param>
        /// <returns>Destination ICloudBlob object</returns>
        private async Task StartCopyInTransferManager(long taskId, IStorageBlobManagement DestChannel, ICloudBlob sourceBlob, ICloudBlob destBlob)
        {
            ValidateBlobName(sourceBlob.Name);
            ValidateContainerName(destBlob.Container.Name);
            ValidateBlobName(destBlob.Name);

            Dictionary<string, string> BlobPath = new Dictionary<string, string>()
            {
                {"Container", destBlob.Container.Name},
                {"Blob", destBlob.Name}
            };

            DataMovementUserData data = new DataMovementUserData()
            {
                Data = BlobPath,
                TaskId = taskId,
                Channel = DestChannel,
                Record = null
            };

            BlobStartCopyJob startCopyJob = new BlobStartCopyJob()
            {
                SourceBlob = sourceBlob,
                DestBlob = destBlob
            };

            await this.EnqueueStartCopyJob(startCopyJob, data);
        }
        protected async Task EnqueueStartCopyJob(BlobStartCopyJob startCopyJob, DataMovementUserData userData)
        {
            await this.RunTransferJob(startCopyJob, userData);

            this.OutputStream.WriteVerbose(userData.TaskId, startCopyJob.CopyId);
            Dictionary<string, string> destBlobPath = userData.Data as Dictionary<string, string>;

            if (destBlobPath != null)
            {
                var destChannel = userData.Channel;
                this.OutputStream.WriteVerbose(userData.TaskId, String.Format(Resources.CopyDestinationBlobPending, destBlobPath["Blob"], destBlobPath["Container"], startCopyJob.CopyId));
                CloudBlobContainer container = destChannel.GetContainerReference(destBlobPath["Container"]);
                ICloudBlob destBlob = this.GetDestinationBlobWithCopyId(destChannel, container, destBlobPath["Blob"]);
                if (destBlob != null)
                {
                    this.WriteICloudBlobObject(userData.TaskId, destChannel, destBlob);
                }
            }
        }
예제 #7
0
        protected void EnqueueStartCopyJob(BlobStartCopyJob startCopyJob, DataMovementUserData userData)
        {
            startCopyJob.FinishEvent += (eventSource, eventArgs) =>
            {
                BlobStartCopyJob tempJob = eventArgs.Job as BlobStartCopyJob;
                this.OnCopyTaskFinish(userData, tempJob.CopyId, eventArgs.Exception);
            };
            this.SetRequestOptionsInTransferJob(startCopyJob);
            startCopyJob.OverwritePromptCallback = ConfirmOverwrite;

            transferManager.EnqueueJob(startCopyJob, CmdletCancellationToken);
        }