【问题标题】:Copy Blobs from one storage account to another storage account using Python使用 Python 将 Blob 从一个存储帐户复制到另一个存储帐户
【发布时间】:2021-08-25 12:27:17
【问题描述】:

我正在尝试使用以下代码将所有 blob 从一个存储帐户复制到同一资源组中的另一个存储帐户:

src_storage_client = BlobServiceClient.from_connection_string(src_storage['connectionString'])
src_container = src_storage_client.get_container_client(src_storage['containerName'])

dst_storage_client = BlobServiceClient.from_connection_string(dst_storage['connectionString'])
dst_container = dst_storage_client.get_container_client(dst_storage['containerName'])

try:
    for blob in src_container.list_blobs():            
        src_blob = BlobClient.from_connection_string(src_storage['connectionString'], src_storage['containerName'], blob.name)
        new_blob = BlobClient.from_connection_string(dst_storage['connectionString'], dst_storage['containerName'], blob.name)
        new_blob.start_copy_from_url(src_blob.url)

我收到以下错误:

azure.core.exceptions.ClientAuthenticationError:操作返回一个 invalid status '服务器未能验证请求。请 请参阅 www-authenticate 标头中的信息。'

我试过 generate_blob_sasgenerate_account_sas 没用! 我查看了其他示例、文档和存储库,但没有一个符合我的情况,除非我遗漏了什么。

使用相同的 new_blob 实例和上传方法,它可以完美运行。但是,我想复制而不是下载然后上传。

【问题讨论】:

    标签: python azure blob azure-blob-storage


    【解决方案1】:

    您的问题中的代码是正确的。你可以在循环中使用container.get_blob_client(blobName)

    for blob in src_container.list_blobs():            
        src_blob = src_container.get_blob_client(blob.name)
        new_blob = dst_container.get_blob_client(blob.name)
        new_blob.start_copy_from_url(src_blob.url)
    

    检查src_blob.urlblob.name是否包含特殊字符或空格很重要,它们需要先编码。它似乎是由特殊 blob 引起的,请尝试使用 blob。使用 SAS 令牌时,应检查允许的权限和过期时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 2016-11-25
      相关资源
      最近更新 更多