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

僤鯓⒐⒋嵵緔 提交于 2020-04-07 05:46:49

问题


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.


回答1:


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.




回答2:


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)


来源:https://stackoverflow.com/questions/59175743/how-to-copy-a-blob-from-one-container-to-another-container-using-azure-blob-stor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!