private static TransferLocation GetSourceTransferLocation(TransferLocation dirLocation, TransferEntry entry) { switch (dirLocation.Type) { case TransferLocationType.AzureBlobDirectory: AzureBlobDirectoryLocation azureBlobDirLocation = dirLocation as AzureBlobDirectoryLocation; AzureBlobEntry azureBlobEntry = entry as AzureBlobEntry; AzureBlobLocation azureBlobLocation = new AzureBlobLocation(azureBlobEntry.Blob); azureBlobLocation.BlobRequestOptions = azureBlobDirLocation.BlobRequestOptions; return(azureBlobLocation); case TransferLocationType.AzureFileDirectory: AzureFileDirectoryLocation azureFileDirLocation = dirLocation as AzureFileDirectoryLocation; AzureFileEntry azureFileEntry = entry as AzureFileEntry; AzureFileLocation azureFileLocation = new AzureFileLocation(azureFileEntry.File); azureFileLocation.FileRequestOptions = azureFileDirLocation.FileRequestOptions; return(azureFileLocation); case TransferLocationType.LocalDirectory: FileEntry fileEntry = entry as FileEntry; return(new FileLocation(fileEntry.FullPath)); default: throw new ArgumentException("TransferLocationType"); } }
public FileAsyncCopyController( TransferScheduler transferScheduler, TransferJob transferJob, CancellationToken cancellationToken) : base(transferScheduler, transferJob, cancellationToken) { if (transferJob.Destination.Type != TransferLocationType.AzureFile) { throw new ArgumentException( string.Format( CultureInfo.CurrentCulture, Resources.ParameterCannotBeNullException, "Dest.AzureFile"), "transferJob"); } if (transferJob.Source.Type != TransferLocationType.SourceUri && transferJob.Source.Type != TransferLocationType.AzureBlob && transferJob.Source.Type != TransferLocationType.AzureFile) { throw new ArgumentException( string.Format( CultureInfo.CurrentCulture, Resources.ProvideExactlyOneOfThreeParameters, "Source.SourceUri", "Source.Blob", "Source.AzureFile"), "transferJob"); } this.destLocation = this.TransferJob.Destination as AzureFileLocation; this.destFile = this.destLocation.AzureFile; }
private TransferLocation GetDestinationTransferLocation(TransferLocation dirLocation, TransferEntry entry) { string destRelativePath = this.nameResolver.ResolveName(entry); switch (dirLocation.Type) { case TransferLocationType.AzureBlobDirectory: { AzureBlobDirectoryLocation blobDirLocation = dirLocation as AzureBlobDirectoryLocation; BlobType destBlobType = this.BlobType; AzureBlobEntry sourceBlobEntry = entry as AzureBlobEntry; if (sourceBlobEntry != null) { // if source is Azure blob storage, source and destination blob share the same blob type destBlobType = sourceBlobEntry.Blob.BlobType; } CloudBlob blob = null; switch (destBlobType) { case Blob.BlobType.BlockBlob: case Blob.BlobType.Unspecified: blob = blobDirLocation.BlobDirectory.GetBlockBlobReference(destRelativePath); break; case Blob.BlobType.PageBlob: blob = blobDirLocation.BlobDirectory.GetPageBlobReference(destRelativePath); break; case Blob.BlobType.AppendBlob: blob = blobDirLocation.BlobDirectory.GetAppendBlobReference(destRelativePath); break; } AzureBlobLocation retLocation = new AzureBlobLocation(blob); retLocation.BlobRequestOptions = blobDirLocation.BlobRequestOptions; return(retLocation); } case TransferLocationType.AzureFileDirectory: { AzureFileDirectoryLocation fileDirLocation = dirLocation as AzureFileDirectoryLocation; CloudFile file = fileDirLocation.FileDirectory.GetFileReference(destRelativePath); CreateParentDirectoryIfNotExists(file); AzureFileLocation retLocation = new AzureFileLocation(file); retLocation.FileRequestOptions = fileDirLocation.FileRequestOptions; return(retLocation); } case TransferLocationType.LocalDirectory: { DirectoryLocation localDirLocation = dirLocation as DirectoryLocation; string path = Path.Combine(localDirLocation.DirectoryPath, destRelativePath); CreateParentDirectoryIfNotExists(path); return(new FileLocation(path)); } default: throw new ArgumentException("TransferLocationType"); } }
private TransferLocation GetDestinationTransferLocation(TransferLocation dirLocation, TransferEntry entry) { string destRelativePath = this.nameResolver.ResolveName(entry); switch(dirLocation.Type) { case TransferLocationType.AzureBlobDirectory: { AzureBlobDirectoryLocation blobDirLocation = dirLocation as AzureBlobDirectoryLocation; BlobType destBlobType = this.BlobType; AzureBlobEntry sourceBlobEntry = entry as AzureBlobEntry; if (sourceBlobEntry != null) { // if source is Azure blob storage, source and destination blob share the same blob type destBlobType = sourceBlobEntry.Blob.BlobType; } CloudBlob blob = null; switch (destBlobType) { case Blob.BlobType.BlockBlob: case Blob.BlobType.Unspecified: blob = blobDirLocation.BlobDirectory.GetBlockBlobReference(destRelativePath); break; case Blob.BlobType.PageBlob: blob = blobDirLocation.BlobDirectory.GetPageBlobReference(destRelativePath); break; case Blob.BlobType.AppendBlob: blob = blobDirLocation.BlobDirectory.GetAppendBlobReference(destRelativePath); break; } AzureBlobLocation retLocation = new AzureBlobLocation(blob); retLocation.BlobRequestOptions = blobDirLocation.BlobRequestOptions; return retLocation; } case TransferLocationType.AzureFileDirectory: { AzureFileDirectoryLocation fileDirLocation = dirLocation as AzureFileDirectoryLocation; CloudFile file = fileDirLocation.FileDirectory.GetFileReference(destRelativePath); CreateParentDirectoryIfNotExists(file); AzureFileLocation retLocation = new AzureFileLocation(file); retLocation.FileRequestOptions = fileDirLocation.FileRequestOptions; return retLocation; } case TransferLocationType.LocalDirectory: { DirectoryLocation localDirLocation = dirLocation as DirectoryLocation; string path = Path.Combine(localDirLocation.DirectoryPath, destRelativePath); CreateParentDirectoryIfNotExists(path); return new FileLocation(path); } default: throw new ArgumentException("TransferLocationType"); } }
private static TransferLocation GetSourceTransferLocation(TransferLocation dirLocation, TransferEntry entry) { switch(dirLocation.Type) { case TransferLocationType.AzureBlobDirectory: AzureBlobDirectoryLocation azureBlobDirLocation = dirLocation as AzureBlobDirectoryLocation; AzureBlobEntry azureBlobEntry = entry as AzureBlobEntry; AzureBlobLocation azureBlobLocation = new AzureBlobLocation(azureBlobEntry.Blob); azureBlobLocation.BlobRequestOptions = azureBlobDirLocation.BlobRequestOptions; return azureBlobLocation; case TransferLocationType.AzureFileDirectory: AzureFileDirectoryLocation azureFileDirLocation = dirLocation as AzureFileDirectoryLocation; AzureFileEntry azureFileEntry = entry as AzureFileEntry; AzureFileLocation azureFileLocation = new AzureFileLocation(azureFileEntry.File); azureFileLocation.FileRequestOptions = azureFileDirLocation.FileRequestOptions; return azureFileLocation; case TransferLocationType.LocalDirectory: FileEntry fileEntry = entry as FileEntry; return new FileLocation(fileEntry.FullPath); default: throw new ArgumentException("TransferLocationType"); } }
/// <summary> /// Copy file from an specified URI to an Azure file. /// </summary> /// <param name="sourceUri">The <see cref="System.Uri"/> of the source file.</param> /// <param name="destFile">The <see cref="CloudFile"/> that is the destination Azure file.</param> /// <param name="isServiceCopy">A flag indicating whether the copy is service-side asynchronous copy or not. /// If this flag is set to true, service-side asychronous copy will be used; if this flag is set to false, /// file is downloaded from source first, then uploaded to destination.</param> /// <param name="options">A <see cref="CopyOptions"/> object that specifies additional options for the operation.</param> /// <param name="context">A <see cref="TransferContext"/> object that represents the context for the current operation.</param> /// <param name="cancellationToken">A <see cref="CancellationToken"/> object to observe while waiting for a task to complete.</param> /// <returns>A <see cref="Task"/> object that represents the asynchronous operation.</returns> /// <remarks>Copying from an URI to Azure file synchronously is not supported yet.</remarks> public static Task CopyAsync(Uri sourceUri, CloudFile destFile, bool isServiceCopy, CopyOptions options, TransferContext context, CancellationToken cancellationToken) { if (!isServiceCopy) { throw new NotSupportedException(Resources.SyncCopyFromUriToAzureFileNotSupportedException); } UriLocation sourceLocation = new UriLocation(sourceUri); AzureFileLocation destLocation = new AzureFileLocation(destFile); if (options != null) { destLocation.AccessCondition = options.DestinationAccessCondition; } return CopyInternalAsync(sourceLocation, destLocation, isServiceCopy, context, cancellationToken); }
/// <summary> /// Copy content, properties and metadata of an Azure file to another. /// </summary> /// <param name="sourceFile">The <see cref="CloudFile"/> that is the source Azure file.</param> /// <param name="destFile">The <see cref="CloudFile"/> that is the destination Azure file.</param> /// <param name="isServiceCopy">A flag indicating whether the copy is service-side asynchronous copy or not. /// If this flag is set to true, service-side asychronous copy will be used; if this flag is set to false, /// file is downloaded from source first, then uploaded to destination.</param> /// <param name="options">A <see cref="CopyOptions"/> object that specifies additional options for the operation.</param> /// <param name="context">A <see cref="TransferContext"/> object that represents the context for the current operation.</param> /// <param name="cancellationToken">A <see cref="CancellationToken"/> object to observe while waiting for a task to complete.</param> /// <returns>A <see cref="Task"/> object that represents the asynchronous operation.</returns> public static Task CopyAsync(CloudFile sourceFile, CloudFile destFile, bool isServiceCopy, CopyOptions options, TransferContext context, CancellationToken cancellationToken) { AzureFileLocation sourceLocation = new AzureFileLocation(sourceFile); AzureFileLocation destLocation = new AzureFileLocation(destFile); if (options != null) { sourceLocation.AccessCondition = options.SourceAccessCondition; destLocation.AccessCondition = options.DestinationAccessCondition; } return CopyInternalAsync(sourceLocation, destLocation, isServiceCopy, context, cancellationToken); }
/// <summary> /// Download an Azure file from Azure File Storage. /// </summary> /// <param name="sourceFile">The <see cref="CloudFile"/> that is the source Azure file.</param> /// <param name="destStream">A <see cref="System.IO.Stream"/> object representing the destination stream.</param> /// <param name="options">A <see cref="DownloadOptions"/> object that specifies additional options for the operation.</param> /// <param name="context">A <see cref="TransferContext"/> object that represents the context for the current operation.</param> /// <param name="cancellationToken">A <see cref="CancellationToken"/> object to observe while waiting for a task to complete.</param> /// <returns>A <see cref="Task"/> object that represents the asynchronous operation.</returns> public static Task DownloadAsync(CloudFile sourceFile, Stream destStream, DownloadOptions options, TransferContext context, CancellationToken cancellationToken) { AzureFileLocation sourceLocation = new AzureFileLocation(sourceFile); StreamLocation destLocation = new StreamLocation(destStream); if (options != null) { sourceLocation.AccessCondition = options.SourceAccessCondition; FileRequestOptions requestOptions = Transfer_RequestOptions.DefaultFileRequestOptions; requestOptions.DisableContentMD5Validation = options.DisableContentMD5Validation; sourceLocation.FileRequestOptions = requestOptions; } return DownloadInternalAsync(sourceLocation, destLocation, context, cancellationToken); }
/// <summary> /// Upload a file to Azure File Storage. /// </summary> /// <param name="sourceStream">A <see cref="System.IO.Stream"/> object providing the file content.</param> /// <param name="destFile">The <see cref="CloudFile"/> that is the destination Azure file.</param> /// <param name="options">An <see cref="UploadOptions"/> object that specifies additional options for the operation.</param> /// <param name="context">A <see cref="TransferContext"/> object that represents the context for the current operation.</param> /// <param name="cancellationToken">A <see cref="CancellationToken"/> object to observe while waiting for a task to complete.</param> /// <returns>A <see cref="Task"/> object that represents the asynchronous operation.</returns> public static Task UploadAsync(Stream sourceStream, CloudFile destFile, UploadOptions options, TransferContext context, CancellationToken cancellationToken) { StreamLocation sourceLocation = new StreamLocation(sourceStream); AzureFileLocation destLocation = new AzureFileLocation(destFile); if (options != null) { destLocation.AccessCondition = options.DestinationAccessCondition; } return UploadInternalAsync(sourceLocation, destLocation, options, context, cancellationToken); }