/// <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 CloudBlob object</returns>
        private async Task StartCopyInTransferManager(long taskId, IStorageBlobManagement destChannel, Uri uri, CloudBlobContainer destContainer, string destBlobName)
        {
            NameUtil.ValidateContainerName(destContainer.Name);
            NameUtil.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
            };

            TransferJob startCopyJob = new TransferJob(
                new TransferLocation(uri),
                new TransferLocation(destContainer.GetBlockBlobReference(destBlobName)),
                TransferMethod.AsyncCopyInAzureStorageWithoutMonitor);

            await this.EnqueueStartCopyJob(startCopyJob, data);
        }
        private void OnCopyTaskFinish(object userData, string copyId, Exception e)
        {
            DataMovementUserData   data        = userData as DataMovementUserData;
            IStorageBlobManagement destChannel = data.Channel;

            if (data != null && e == null)
            {
                OutputStream.WriteVerbose(data.TaskId, copyId);
                Dictionary <string, string> destBlobPath = data.Data as Dictionary <string, string>;

                if (destBlobPath != null)
                {
                    OutputStream.WriteVerbose(data.TaskId, String.Format(Resources.CopyDestinationBlobPending, destBlobPath["Blob"], destBlobPath["Container"], copyId));
                    CloudBlobContainer container = destChannel.GetContainerReference(destBlobPath["Container"]);

                    try
                    {
                        ICloudBlob destBlob = GetDestinationBlobWithCopyId(destChannel, container, destBlobPath["Blob"]);
                        if (destBlob != null)
                        {
                            WriteICloudBlobObject(data.TaskId, destChannel, destBlob);
                        }
                    }
                    catch (Exception readException)
                    {
                        e = readException;
                    }
                }
            }

            OnDMJobFinish(userData, e);
        }
        /// <summary>
        /// Download blob to local file
        /// </summary>
        /// <param name="blob">Source blob object</param>
        /// <param name="filePath">Destination file path</param>
        internal virtual async Task DownloadBlob(long taskId, IStorageBlobManagement localChannel, CloudBlob blob, string filePath)
        {
            string               activity = String.Format(Resources.ReceiveAzureBlobActivity, blob.Name, filePath);
            string               status   = Resources.PrepareDownloadingBlob;
            ProgressRecord       pr       = new ProgressRecord(OutputStream.GetProgressId(taskId), activity, status);
            DataMovementUserData data     = new DataMovementUserData()
            {
                Data      = blob,
                TaskId    = taskId,
                Channel   = localChannel,
                Record    = pr,
                TotalSize = blob.Properties.Length
            };

            await DataMovementTransferHelper.DoTransfer(() =>
            {
                return(this.TransferManager.DownloadAsync(blob, filePath,
                                                          new DownloadOptions()
                {
                    DisableContentMD5Validation = !this.checkMd5
                },
                                                          this.GetTransferContext(data),
                                                          this.CmdletCancellationToken));
            },
                                                        data.Record,
                                                        this.OutputStream);

            this.WriteCloudBlobObject(data.TaskId, data.Channel, blob);
        }
        /// <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);
        }
        /// <summary>
        /// Download blob to local file
        /// </summary>
        /// <param name="blob">Source blob object</param>
        /// <param name="filePath">Destination file path</param>
        internal virtual async Task DownloadBlob(long taskId, IStorageBlobManagement localChannel, ICloudBlob blob, string filePath)
        {
            string               activity = String.Format(Resources.ReceiveAzureBlobActivity, blob.Name, filePath);
            string               status   = Resources.PrepareDownloadingBlob;
            ProgressRecord       pr       = new ProgressRecord(OutputStream.GetProgressId(taskId), activity, status);
            DataMovementUserData data     = new DataMovementUserData()
            {
                Data    = blob,
                TaskId  = taskId,
                Channel = localChannel,
                Record  = pr
            };

            BlobDownloadJob downloadJob = new BlobDownloadJob()
            {
                SourceBlob = blob,
                DestPath   = filePath,
            };

            BlobRequestOptions requestOptions = downloadJob.BlobRequestOptions;

            requestOptions.DisableContentMD5Validation = !checkMd5;
            downloadJob.BlobRequestOptions             = requestOptions;

            await this.RunTransferJob(downloadJob, data);

            this.WriteICloudBlobObject(data.TaskId, data.Channel, blob);
        }
        /// <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 blob, CloudBlobContainer destContainer, string destBlobName)
        {
            if (string.IsNullOrEmpty(destBlobName))
            {
                destBlobName = blob.Name;
            }

            ValidateBlobName(blob.Name);
            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
            };

            transferManager.QueueBlobStartCopy(blob, destContainer, destBlobName, null, OnCopyTaskFinish, data);
            await data.taskSource.Task;
        }
Exemplo n.º 8
0
        /// <summary>
        /// On Task run successfully
        /// </summary>
        /// <param name="data">User data</param>
        protected override void OnTaskSuccessful(DataMovementUserData data)
        {
            ICloudBlob blob = data.Data as ICloudBlob;

            if (blob != null)
            {
                WriteICloudBlobObject(data.TaskId, data.Channel, blob);
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Download blob to local file
        /// </summary>
        /// <param name="blob">Source blob object</param>
        /// <param name="filePath">Destination file path</param>
        internal virtual async Task <bool> DownloadBlob(long taskId, IStorageBlobManagement localChannel, ICloudBlob blob, string filePath)
        {
            string               activity = String.Format(Resources.ReceiveAzureBlobActivity, blob.Name, filePath);
            string               status   = Resources.PrepareDownloadingBlob;
            ProgressRecord       pr       = new ProgressRecord(OutputStream.GetProgressId(taskId), activity, status);
            DataMovementUserData data     = new DataMovementUserData()
            {
                Data    = blob,
                TaskId  = taskId,
                Channel = localChannel,
                Record  = pr
            };

            transferManager.QueueDownload(blob, filePath, checkMd5, OnDMJobStart, OnDMJobProgress, OnDMJobFinish, data);

            return(await data.taskSource.Task);
        }
Exemplo n.º 10
0
        /// <summary>
        /// upload file to azure blob
        /// </summary>
        /// <param name="taskId">Task id</param>
        /// <param name="filePath">local file path</param>
        /// <param name="blob">destination azure blob object</param>
        internal virtual async Task Upload2Blob(long taskId, IStorageBlobManagement localChannel, string filePath, CloudBlob blob)
        {
            string         activity = String.Format(Resources.SendAzureBlobActivity, filePath, blob.Name, blob.Container.Name);
            string         status   = Resources.PrepareUploadingBlob;
            ProgressRecord pr       = new ProgressRecord(OutputStream.GetProgressId(taskId), activity, status);

            FileInfo fileInfo = new FileInfo(filePath);

            DataMovementUserData data = new DataMovementUserData()
            {
                Data      = blob,
                TaskId    = taskId,
                Channel   = localChannel,
                Record    = pr,
                TotalSize = fileInfo.Length
            };

            SingleTransferContext transferContext = this.GetTransferContext(data);

#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
            transferContext.SetAttributesCallbackAsync = async(source, destination) =>
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
            {
                CloudBlob destBlob = destination as CloudBlob;
                SetAzureBlobContentCommand.SetBlobProperties(destBlob, this.BlobProperties);
                SetAzureBlobContentCommand.SetBlobMeta(destBlob, this.BlobMetadata);
            };

            await DataMovementTransferHelper.DoTransfer(() =>
            {
                return(this.TransferManager.UploadAsync(filePath,
                                                        blob,
                                                        null,
                                                        transferContext,
                                                        this.CmdletCancellationToken));
            },
                                                        data.Record,
                                                        this.OutputStream).ConfigureAwait(false);

            // Set blob permission with umask, since create Blob API still not support them
            SetBlobPermissionWithUMask((CloudBlockBlob)blob, this.Permission, this.Umask);

            WriteDataLakeGen2Item(localChannel, fileSystem.GetFileClient(blob.Name), taskId: data.TaskId);
        }
        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>
        /// Download blob to local file
        /// </summary>
        /// <param name="blob">Source blob object</param>
        /// <param name="filePath">Destination file path</param>
        internal virtual async Task DownloadBlob(long taskId, IStorageBlobManagement localChannel, CloudBlob blob, string filePath)
        {
            string activity = String.Format(Resources.ReceiveAzureBlobActivity, blob.Name, filePath);
            string status = Resources.PrepareDownloadingBlob;
            ProgressRecord pr = new ProgressRecord(OutputStream.GetProgressId(taskId), activity, status);
            DataMovementUserData data = new DataMovementUserData()
            {
                Data = blob,
                TaskId = taskId,
                Channel = localChannel,
                Record = pr,
                TotalSize = blob.Properties.Length
            };

            await DataMovementTransferHelper.DoTransfer(() =>
                {
                    return this.TransferManager.DownloadAsync(blob, filePath,
                        new DownloadOptions()
                        {
                            DisableContentMD5Validation = !this.checkMd5
                        },
                        this.GetTransferContext(data),
                        this.CmdletCancellationToken);
                }, 
                data.Record,
                this.OutputStream);

            this.WriteCloudBlobObject(data.TaskId, data.Channel, blob);
        }
        /// <summary>
        /// On Task run successfully
        /// </summary>
        /// <param name="data">User data</param>
        protected override void OnTaskSuccessful(DataMovementUserData data)
        {
            ICloudBlob blob = data.Data as ICloudBlob;

            if (blob != null)
            {
                WriteICloudBlobObject(data.TaskId, data.Channel, blob);
            }
        }
        /// <summary>
        /// Download blob to local file
        /// </summary>
        /// <param name="blob">Source blob object</param>
        /// <param name="filePath">Destination file path</param>
        internal virtual async Task<bool> DownloadBlob(long taskId, IStorageBlobManagement localChannel, ICloudBlob blob, string filePath)
        {
            string activity = String.Format(Resources.ReceiveAzureBlobActivity, blob.Name, filePath);
            string status = Resources.PrepareDownloadingBlob;
            ProgressRecord pr = new ProgressRecord(OutputStream.GetProgressId(taskId), activity, status);
            DataMovementUserData data = new DataMovementUserData()
            {
                Data = blob,
                TaskId = taskId,
                Channel = localChannel,
                Record = pr
            };

            transferManager.QueueDownload(blob, filePath, checkMd5, OnDMJobStart, OnDMJobProgress, OnDMJobFinish, data);

            return await data.taskSource.Task;
        }
        /// <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);
        }
        /// <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 CloudBlob object</returns>
        private async Task StartCopyInTransferManager(long taskId, IStorageBlobManagement destChannel, Uri uri, CloudBlobContainer destContainer, string destBlobName)
        {
            NameUtil.ValidateContainerName(destContainer.Name);
            NameUtil.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
            };

            TransferJob startCopyJob = new TransferJob(
                new TransferLocation(uri), 
                new TransferLocation(destContainer.GetBlockBlobReference(destBlobName)),
                TransferMethod.AsyncCopyInAzureStorageWithoutMonitor);

            await this.EnqueueStartCopyJob(startCopyJob, data);
        }
        /// <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
            };

            transferManager.QueueBlobStartCopy(uri, destContainer, destBlobName, null, OnCopyTaskFinish, data);
            await data.taskSource.Task;
        }
Exemplo n.º 19
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);
        }
Exemplo n.º 20
0
        private void OnCopyTaskFinish(DataMovementUserData userData, string copyId, Exception e)
        {
            IStorageBlobManagement destChannel = userData.Channel;

            if (userData != null && e == null)
            {
                OutputStream.WriteVerbose(userData.TaskId, copyId);
                Dictionary<string, string> destBlobPath = userData.Data as Dictionary<string, string>;

                if (destBlobPath != null)
                {
                    OutputStream.WriteVerbose(userData.TaskId, String.Format(Resources.CopyDestinationBlobPending, destBlobPath["Blob"], destBlobPath["Container"], copyId));
                    CloudBlobContainer container = destChannel.GetContainerReference(destBlobPath["Container"]);

                    try
                    {
                        ICloudBlob destBlob = GetDestinationBlobWithCopyId(destChannel, container, destBlobPath["Blob"]);
                        if (destBlob != null)
                        {
                            WriteICloudBlobObject(userData.TaskId, destChannel, destBlob);
                        }
                    }
                    catch (Exception readException)
                    {
                        e = readException;
                    }
                }
            }

            OnDMJobFinish(userData, e);
        }
        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>
        /// Download blob to local file
        /// </summary>
        /// <param name="blob">Source blob object</param>
        /// <param name="filePath">Destination file path</param>
        internal virtual async Task<bool> DownloadBlob(long taskId, IStorageBlobManagement localChannel, ICloudBlob blob, string filePath)
        {
            string activity = String.Format(Resources.ReceiveAzureBlobActivity, blob.Name, filePath);
            string status = Resources.PrepareDownloadingBlob;
            ProgressRecord pr = new ProgressRecord(OutputStream.GetProgressId(taskId), activity, status);
            DataMovementUserData data = new DataMovementUserData()
            {
                Data = blob,
                TaskId = taskId,
                Channel = localChannel,
                Record = pr
            };

            BlobDownloadJob downloadJob = new BlobDownloadJob() 
            {
                SourceBlob = blob,
                DestPath = filePath,
            };

            BlobRequestOptions requestOptions = downloadJob.BlobRequestOptions;
            requestOptions.DisableContentMD5Validation = !checkMd5;
            downloadJob.BlobRequestOptions = requestOptions;

            this.EnqueueTransferJob(downloadJob, data);
                        
            return await data.taskSource.Task;
        }
        /// <summary>
        /// Download blob to local file
        /// </summary>
        /// <param name="blob">Source blob object</param>
        /// <param name="filePath">Destination file path</param>
        internal virtual async Task DownloadBlob(long taskId, IStorageBlobManagement localChannel, CloudBlob blob, string filePath)
        {
            string activity = String.Format(Resources.ReceiveAzureBlobActivity, blob.Name, filePath);
            string status = Resources.PrepareDownloadingBlob;
            ProgressRecord pr = new ProgressRecord(OutputStream.GetProgressId(taskId), activity, status);
            DataMovementUserData data = new DataMovementUserData()
            {
                Data = blob,
                TaskId = taskId,
                Channel = localChannel,
                Record = pr
            };

            TransferJob downloadJob = new TransferJob(
                new TransferLocation(blob),
                new TransferLocation(filePath),
                TransferMethod.SyncCopy);

            BlobRequestOptions requestOptions = downloadJob.Source.RequestOptions as BlobRequestOptions;

            if (null == requestOptions)
            {
                requestOptions = new BlobRequestOptions();
            }

            requestOptions.DisableContentMD5Validation = !checkMd5;
            downloadJob.Source.RequestOptions = requestOptions;

            await this.RunTransferJob(downloadJob, data);

            this.WriteCloudBlobObject(data.TaskId, data.Channel, blob);
        }