How to copy a blob from one container to another c

2020-04-15 07:01发布

I have been referring to the document https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python. I have not been able to find the proper APIs for copy/move a file from one container to another container. Let's say I have two containers A and B. Now I want to copy a blob from A to B. How can I achieve this? An example will be appreciated.

Library details:

azure-core==1.1.1
azure-storage-blob==12.0.0

Note: I have been through this thread which is supported only in older version of the SDK.

2条回答
Luminary・发光体
2楼-- · 2020-04-15 07:13

Here's a full example for version 12.0.0 of the SDK:

from azure.storage.blob import BlobClient, BlobServiceClient
from azure.storage.blob import ResourceTypes, AccountSasPermissions
from azure.storage.blob import generate_account_sas    

connection_string = '' # The connection string for the source container
account_key = '' # The account key for the source container
source_container_name = '' # Name of container which has blob to be copied
blob_name = '' # Name of the blob you want to copy
destination_container_name = '' # Name of container where blob will be copied

# Create client
client = BlobServiceClient.from_connection_string(connection_string) 

# Create sas token for blob
sas_token = generate_account_sas(
    account_name = client.account_name,
    account_key = account_key 
    resource_types = ResourceTypes(object=True, container=True),
    permission= AccountSasPermission(read=True,list=True),
    start = datetime.now()
    expiry = datetime.utcnow() + timedelta(hours=4) # Token valid for 4 hours
)

# Create blob client for source blob
source_blob = BlobClient(
    client.url,
    container_name = source_container_name, 
    blob_name = blob_name,
    credential = sas_token
)

# Create new blob and start copy operation.
new_blob = client.get_blob_client(destination_container_name, blob_name)    
new_blob.start_copy_from_url(source_blob.url)

See here for more information on how you can get the connection string and access key for the container.


This answer assumes that both containers are within the same subscription.

查看更多
看我几分像从前
3楼-- · 2020-04-15 07:23

You should take a look at start_copy_from_url method in the SDK.

From the same link:

# Get the blob client with the source blob
source_blob = "<source-blob-url>"
copied_blob = blob_service_client.get_blob_client("<target-container>", '<blob-name>')

# start copy and check copy status
copy = copied_blob.start_copy_from_url(source_blob)
props = copied_blob.get_blob_properties()
print(props.copy.status)
查看更多
登录 后发表回答