diff --git a/sdk/storage/Azure.Storage.DataMovement.Blobs/README.md b/sdk/storage/Azure.Storage.DataMovement.Blobs/README.md index bcc5b71b6680..0e9b4bf45e28 100644 --- a/sdk/storage/Azure.Storage.DataMovement.Blobs/README.md +++ b/sdk/storage/Azure.Storage.DataMovement.Blobs/README.md @@ -191,7 +191,7 @@ Upload a block blob. ```C# Snippet:SimpleBlobUpload DataTransfer dataTransfer = await transferManager.StartTransferAsync( - sourceResource: files.FromPath(sourceLocalPath), + sourceResource: files.FromFile(sourceLocalPath), destinationResource: blobs.FromClient(destinationBlob)); await dataTransfer.WaitForCompletionAsync(); ``` @@ -200,7 +200,7 @@ Upload a directory as a specific blob type. ```C# Snippet:SimpleDirectoryUpload DataTransfer dataTransfer = await transferManager.StartTransferAsync( - sourceResource: files.FromPath(sourcePath), + sourceResource: files.FromDirectory(sourcePath), destinationResource: blobs.FromClient( blobContainerClient, new BlobStorageResourceContainerOptions() @@ -224,7 +224,7 @@ BlobsStorageResourceProvider blobs = new(); LocalFilesStorageResourceProvider files = new(); DataTransfer dataTransfer = await transferManager.StartTransferAsync( sourceResource: blobs.FromClient(sourceBlobClient), - destinationResource: files.FromPath(downloadPath)); + destinationResource: files.FromFile(downloadPath)); await dataTransfer.WaitForCompletionAsync(); ``` @@ -238,7 +238,7 @@ DataTransfer dataTransfer = await transferManager.StartTransferAsync( { BlobDirectoryPrefix = optionalSourcePrefix }), - destinationResource: files.FromPath(downloadPath)); + destinationResource: files.FromDirectory(downloadPath)); await dataTransfer.WaitForCompletionAsync(); ``` diff --git a/sdk/storage/Azure.Storage.DataMovement.Blobs/samples/Sample01b_HelloWorldAsync.cs b/sdk/storage/Azure.Storage.DataMovement.Blobs/samples/Sample01b_HelloWorldAsync.cs index 36f93c2c4b23..f2e1e8623ac8 100644 --- a/sdk/storage/Azure.Storage.DataMovement.Blobs/samples/Sample01b_HelloWorldAsync.cs +++ b/sdk/storage/Azure.Storage.DataMovement.Blobs/samples/Sample01b_HelloWorldAsync.cs @@ -44,7 +44,7 @@ public async Task ResourceConstructionDemonstration() // Get a reference to a source local file LocalFilesStorageResourceProvider files = new(); - StorageResource sourceResource = files.FromPath(sourceLocalPath); + StorageResource sourceResource = files.FromFile(sourceLocalPath); // Get a reference to a destination blobs BlockBlobClient blockBlobClient = blobContainerClient.GetBlockBlobClient("sample-blob-block"); @@ -133,7 +133,7 @@ public async Task UploadSingle_ConnectionStringAsync() // Create simple transfer single blob upload job #region Snippet:SimpleBlobUpload DataTransfer dataTransfer = await transferManager.StartTransferAsync( - sourceResource: files.FromPath(sourceLocalPath), + sourceResource: files.FromFile(sourceLocalPath), destinationResource: blobs.FromClient(destinationBlob)); await dataTransfer.WaitForCompletionAsync(); #endregion @@ -206,19 +206,19 @@ public async Task DownloadSingle_SharedKeyAuthAsync() LocalFilesStorageResourceProvider files = new(); DataTransfer dataTransfer = await transferManager.StartTransferAsync( sourceResource: blobs.FromClient(sourceBlobClient), - destinationResource: files.FromPath(downloadPath)); + destinationResource: files.FromFile(downloadPath)); await dataTransfer.WaitForCompletionAsync(); #endregion StorageResource sourceResource2 = blobs.FromClient(sourceBlobClient); - StorageResource destinationResource2 = files.FromPath(downloadPath2); + StorageResource destinationResource2 = files.FromFile(downloadPath2); await transferManager.StartTransferAsync( sourceResource: blobs.FromClient(sourceBlobClient, new BlockBlobStorageResourceOptions() { DestinationConditions = new BlobRequestConditions(){ LeaseId = "xyz" } }), - destinationResource: files.FromPath(downloadPath2)); + destinationResource: files.FromFile(downloadPath2)); } finally { @@ -287,7 +287,7 @@ public async Task UploadDirectory_SasAsync() BlobsStorageResourceProvider blobs = new(); LocalFilesStorageResourceProvider files = new(); // Get a storage resource reference to a local directory - StorageResource localDirectory = files.FromPath(sourcePath); + StorageResource localDirectory = files.FromDirectory(sourcePath); // Get a storage resource to a destination blob directory StorageResource directoryDestination = blobs.FromClient( blobContainerClient, @@ -306,7 +306,7 @@ public async Task UploadDirectory_SasAsync() string optionalDestinationPrefix = "sample-directory2"; #region Snippet:SimpleDirectoryUpload DataTransfer dataTransfer = await transferManager.StartTransferAsync( - sourceResource: files.FromPath(sourcePath), + sourceResource: files.FromDirectory(sourcePath), destinationResource: blobs.FromClient( blobContainerClient, new BlobStorageResourceContainerOptions() @@ -403,7 +403,7 @@ public async Task UploadDirectory_CompletedEventHandler() // Create simple transfer directory upload job which uploads the directory and the contents of that directory DataTransfer uploadDirectoryJobId = await transferManager.StartTransferAsync( - files.FromPath(sourcePath), + files.FromDirectory(sourcePath), blobs.FromClient( container, new BlobStorageResourceContainerOptions() { BlobDirectoryPrefix = "sample-blob-directory" })); @@ -508,7 +508,7 @@ public async Task UploadDirectory_EventHandler_SasAsync() // Create simple transfer directory upload job which uploads the directory and the contents of that directory DataTransfer uploadDirectoryJobId = await transferManager.StartTransferAsync( - files.FromPath(sourcePath), + files.FromDirectory(sourcePath), blobs.FromClient( container, new BlobStorageResourceContainerOptions() { BlobDirectoryPrefix = "sample-blob-directory" })); @@ -569,8 +569,8 @@ public async Task DownloadDirectory_EventHandler_ActiveDirectoryAuthAsync() new BlobStorageResourceContainerOptions() { BlobDirectoryPrefix = "sample-blob-directory" }); StorageResource sourceDirectory2 = blobs.FromClient(blobContainerClient, new BlobStorageResourceContainerOptions() { BlobDirectoryPrefix = "sample-blob-directory2" }); - StorageResource destinationDirectory = files.FromPath(downloadPath); - StorageResource destinationDirectory2 = files.FromPath(downloadPath2); + StorageResource destinationDirectory = files.FromDirectory(downloadPath); + StorageResource destinationDirectory2 = files.FromDirectory(downloadPath2); // Upload a couple of blobs so we have something to list await blobContainerClient.UploadBlobAsync("first", File.OpenRead(CreateTempFile())); @@ -605,7 +605,7 @@ await transferManager.StartTransferAsync( { BlobDirectoryPrefix = optionalSourcePrefix }), - destinationResource: files.FromPath(downloadPath)); + destinationResource: files.FromDirectory(downloadPath)); await dataTransfer.WaitForCompletionAsync(); #endregion } @@ -733,8 +733,8 @@ public async Task CopyDirectory() new BlobStorageResourceContainerOptions() { BlobDirectoryPrefix = sourceDirectoryName2 }); // Create destination paths - StorageResource destinationDirectory1 = files.FromPath(downloadPath); - StorageResource destinationDirectory2 = files.FromPath(downloadPath2); + StorageResource destinationDirectory1 = files.FromDirectory(downloadPath); + StorageResource destinationDirectory2 = files.FromDirectory(downloadPath2); // Upload a couple of blobs so we have something to list await container.UploadBlobAsync($"{sourceDirectoryName}/fourth", File.OpenRead(originalPath)); @@ -811,7 +811,7 @@ public async Task PauseAndResumeAsync_ManagerId() LocalFilesStorageResourceProvider files = new(); // Create source and destination resource StorageResource sourceResource = blobs.FromClient(sourceBlob); - StorageResource destinationResource = files.FromPath(downloadPath); + StorageResource destinationResource = files.FromFile(downloadPath); // Create simple transfer single blob download job DataTransfer dataTransfer = await transferManager.StartTransferAsync( @@ -863,7 +863,7 @@ public async Task PauseAndResumeAsync_DataTransferPause() // Create source and destination resource StorageResource sourceResource = blobs.FromClient(sourceBlob); - StorageResource destinationResource = files.FromPath(downloadPath); + StorageResource destinationResource = files.FromFile(downloadPath); // Create simple transfer single blob download job DataTransfer dataTransfer = await transferManager.StartTransferAsync( diff --git a/sdk/storage/Azure.Storage.DataMovement.Blobs/src/BlobContainerClientExtensions.cs b/sdk/storage/Azure.Storage.DataMovement.Blobs/src/BlobContainerClientExtensions.cs index c7227a37185e..48371db6026a 100644 --- a/sdk/storage/Azure.Storage.DataMovement.Blobs/src/BlobContainerClientExtensions.cs +++ b/sdk/storage/Azure.Storage.DataMovement.Blobs/src/BlobContainerClientExtensions.cs @@ -49,7 +49,7 @@ public static Task StartUploadDirectoryAsync( /// A instance which can be used track progress and wait for completion with . public static async Task StartUploadDirectoryAsync(this BlobContainerClient client, string localDirectoryPath, BlobContainerClientTransferOptions options) { - StorageResource localDirectory = s_filesProvider.Value.FromPath(localDirectoryPath); + StorageResource localDirectory = s_filesProvider.Value.FromDirectory(localDirectoryPath); StorageResource blobDirectory = s_blobsProvider.Value.FromClient(client, options?.BlobContainerOptions); return await s_defaultTransferManager.Value.StartTransferAsync(localDirectory, blobDirectory, options?.TransferOptions).ConfigureAwait(false); @@ -86,7 +86,7 @@ public static Task StartDownloadToDirectoryAsync( /// public static async Task StartDownloadToDirectoryAsync(this BlobContainerClient client, string localDirectoryPath, BlobContainerClientTransferOptions options) { - StorageResource localDirectory = s_filesProvider.Value.FromPath(localDirectoryPath); + StorageResource localDirectory = s_filesProvider.Value.FromDirectory(localDirectoryPath); StorageResource blobDirectory = s_blobsProvider.Value.FromClient(client, options?.BlobContainerOptions); return await s_defaultTransferManager.Value.StartTransferAsync(blobDirectory, localDirectory, options?.TransferOptions).ConfigureAwait(false); diff --git a/sdk/storage/Azure.Storage.DataMovement.Files.Shares/src/ShareDirectoryClientExtensions.cs b/sdk/storage/Azure.Storage.DataMovement.Files.Shares/src/ShareDirectoryClientExtensions.cs index d59047129b16..d6bcdc77d9a3 100644 --- a/sdk/storage/Azure.Storage.DataMovement.Files.Shares/src/ShareDirectoryClientExtensions.cs +++ b/sdk/storage/Azure.Storage.DataMovement.Files.Shares/src/ShareDirectoryClientExtensions.cs @@ -38,7 +38,7 @@ public static async Task StartUploadDirectoryAsync( string localDirectoryPath, ShareDirectoryClientTransferOptions options = default) { - StorageResource localDirectory = s_localFilesProvider.Value.FromPath(localDirectoryPath); + StorageResource localDirectory = s_localFilesProvider.Value.FromDirectory(localDirectoryPath); StorageResource shareDirectory = s_shareFilesProvider.Value.FromClient(client, options?.ShareDirectoryOptions); return await s_defaultTransferManager.Value.StartTransferAsync( @@ -57,7 +57,7 @@ public static async Task StartDownloadToDirectoryAsync( string localDirectoryPath, ShareDirectoryClientTransferOptions options = default) { - StorageResource localDirectory = s_localFilesProvider.Value.FromPath(localDirectoryPath); + StorageResource localDirectory = s_localFilesProvider.Value.FromDirectory(localDirectoryPath); StorageResource shareDirectory = s_shareFilesProvider.Value.FromClient(client, options?.ShareDirectoryOptions); return await s_defaultTransferManager.Value.StartTransferAsync( diff --git a/sdk/storage/Azure.Storage.DataMovement/api/Azure.Storage.DataMovement.net6.0.cs b/sdk/storage/Azure.Storage.DataMovement/api/Azure.Storage.DataMovement.net6.0.cs index ee62763d45fa..ca42145f6cd4 100644 --- a/sdk/storage/Azure.Storage.DataMovement/api/Azure.Storage.DataMovement.net6.0.cs +++ b/sdk/storage/Azure.Storage.DataMovement/api/Azure.Storage.DataMovement.net6.0.cs @@ -95,7 +95,8 @@ public partial class LocalFilesStorageResourceProvider : Azure.Storage.DataMovem public LocalFilesStorageResourceProvider() { } protected internal override string TypeId { get { throw null; } } protected internal override System.Threading.Tasks.Task FromDestinationAsync(Azure.Storage.DataMovement.DataTransferProperties properties, System.Threading.CancellationToken cancellationToken) { throw null; } - public Azure.Storage.DataMovement.StorageResource FromPath(string path) { throw null; } + public Azure.Storage.DataMovement.StorageResourceContainer FromDirectory(string directoryPath) { throw null; } + public Azure.Storage.DataMovement.StorageResourceItem FromFile(string filePath) { throw null; } protected internal override System.Threading.Tasks.Task FromSourceAsync(Azure.Storage.DataMovement.DataTransferProperties properties, System.Threading.CancellationToken cancellationToken) { throw null; } } public partial class ProgressHandlerOptions diff --git a/sdk/storage/Azure.Storage.DataMovement/api/Azure.Storage.DataMovement.netstandard2.0.cs b/sdk/storage/Azure.Storage.DataMovement/api/Azure.Storage.DataMovement.netstandard2.0.cs index ee62763d45fa..ca42145f6cd4 100644 --- a/sdk/storage/Azure.Storage.DataMovement/api/Azure.Storage.DataMovement.netstandard2.0.cs +++ b/sdk/storage/Azure.Storage.DataMovement/api/Azure.Storage.DataMovement.netstandard2.0.cs @@ -95,7 +95,8 @@ public partial class LocalFilesStorageResourceProvider : Azure.Storage.DataMovem public LocalFilesStorageResourceProvider() { } protected internal override string TypeId { get { throw null; } } protected internal override System.Threading.Tasks.Task FromDestinationAsync(Azure.Storage.DataMovement.DataTransferProperties properties, System.Threading.CancellationToken cancellationToken) { throw null; } - public Azure.Storage.DataMovement.StorageResource FromPath(string path) { throw null; } + public Azure.Storage.DataMovement.StorageResourceContainer FromDirectory(string directoryPath) { throw null; } + public Azure.Storage.DataMovement.StorageResourceItem FromFile(string filePath) { throw null; } protected internal override System.Threading.Tasks.Task FromSourceAsync(Azure.Storage.DataMovement.DataTransferProperties properties, System.Threading.CancellationToken cancellationToken) { throw null; } } public partial class ProgressHandlerOptions diff --git a/sdk/storage/Azure.Storage.DataMovement/src/LocalFilesStorageResourceProvider.cs b/sdk/storage/Azure.Storage.DataMovement/src/LocalFilesStorageResourceProvider.cs index a4355d7d275f..610004e09461 100644 --- a/sdk/storage/Azure.Storage.DataMovement/src/LocalFilesStorageResourceProvider.cs +++ b/sdk/storage/Azure.Storage.DataMovement/src/LocalFilesStorageResourceProvider.cs @@ -41,20 +41,31 @@ private StorageResource FromTransferProperties(DataTransferProperties properties } /// - /// Creates a storage resource to the file or directory at the given path. + /// Creates a storage resource to the file at the given path. /// - /// - /// Path to the file or directory. + /// + /// Path to the file. /// /// - /// Storage resource to this file or directory. + /// Storage resource to this file. /// - public StorageResource FromPath(string path) + public StorageResourceItem FromFile(string filePath) { - FileAttributes attributes = File.GetAttributes(path); - return attributes.HasFlag(FileAttributes.Directory) - ? new LocalDirectoryStorageResourceContainer(path) - : new LocalFileStorageResource(path); + return new LocalFileStorageResource(filePath); + } + + /// + /// Creates a storage resource to the directory at the given path. + /// + /// + /// Path to the directory. + /// + /// + /// Storage resource to this directory. + /// + public StorageResourceContainer FromDirectory(string directoryPath) + { + return new LocalDirectoryStorageResourceContainer(directoryPath); } } }