如何使用Azure Blob存储SDK将Blob从一个容器复制到另一个容器

时间:2019-12-04 12:09:59

标签: python azure azure-storage azure-blob-storage azure-sdk-python

我一直在参考文档https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python。我无法找到用于将文件从一个容器复制/移动到另一个容器的正确API。假设我有两个容器A和B。现在我要将一个Blob从A复制到B。如何实现呢?一个例子将不胜感激。

库的详细信息:

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

注意:我经历过this thread,只有旧版SDK才支持。

2 个答案:

答案 0 :(得分:2)

下面是SDK版本 12.0.0 的完整示例:

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)

有关如何获取容器的连接字符串和访问密钥的更多信息,请参见here


此答案假定两个容器都在同一预订中。

答案 1 :(得分:1)

您应该看看SDK中的start_copy_from_url方法。

通过同一链接:

# 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)