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();
}
}
}
Comments
Post a Comment