How to copy a blob from one container to another container using Azure Blob storage SDK

前端 未结 2 1573
不知归路
不知归路 2021-01-20 10:48

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

相关标签:
2条回答
  • 2021-01-20 11:18

    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)
    
    0 讨论(0)
  • 2021-01-20 11:25

    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.

    0 讨论(0)
提交回复
热议问题