Copying All Blob of given Container into the same container and under subfolder?
Here are few key points about the copying blob in Azure Storage Account:
- When you copy a blob within the same storage account, it's a synchronous operation.
 - When you copy across accounts it's an asynchronous operation.
 - The source blob for a copy operation may be a block blob, an append blob, a page blob, or a snapshot. If the destination blob already exists, it must be of the same blob type as the source blob. An existing destination blob will be overwritten.
 - The destination blob can't be modified while a copy operation is in progress. A destination blob can only have one outstanding copy operation. In other words, a blob can't be the destination for multiple pending copy operations.
 
To copy a blob, call one of the following methods:
- StartCopyFromUri
 - StartCopyFromUriAsync
 
We are using .Net Core 3.1
Step 1: Install-Package Azure.Storage.Blobs -Version 12.10.0
Step 2: use the following code to move your container (named images)file into the same container under a subfolder name called
for example, if your current file store in images/my-pic.png this code will move to images/my-folder/my-pic.png
private static async Task CopyBlobToSubFolderAsync(BlobContainerClient container)
{
        // Get the name of the first blob in the container to use as the source.
        string blobName = container.GetBlobs().FirstOrDefault().Name;
        // Create a BlobClient representing the source blob to copy.
        BlobClient sourceBlob = container.GetBlobClient(blobName);
        // Ensure that the source blob exists.
        if (await sourceBlob.ExistsAsync())
        {
            // Lease the source blob for the copy operation 
            // to prevent another client from modifying it.
            BlobLeaseClient lease = sourceBlob.GetBlobLeaseClient();
            // Specifying -1 for the lease interval creates an infinite lease.
            await lease.AcquireAsync(TimeSpan.FromSeconds(-1));
            // Get the source blob's properties and display the lease state.
            BlobProperties sourceProperties = await sourceBlob.GetPropertiesAsync();
            // Get a BlobClient representing the destination blob with a unique name.
            BlobClient destBlob = 
                container.GetBlobClient("my-folder/" + sourceBlob.Name);
            // Start the copy operation.
            await destBlob.StartCopyFromUriAsync(sourceBlob.Uri);
            // Get the destination blob's properties and display the copy status.
            BlobProperties destProperties = await destBlob.GetPropertiesAsync();
            // Update the source blob's properties.
            sourceProperties = await sourceBlob.GetPropertiesAsync();
            if (sourceProperties.LeaseState == LeaseState.Leased)
            {
                // Break the lease on the source blob.
                await lease.BreakAsync();
                // Update the source blob's properties to check the lease state.
                sourceProperties = await sourceBlob.GetPropertiesAsync();
            }
        }   
}
No comments:
Post a Comment