Python:如何将 Azure Blob 从一个容器移动或复制到另一个容器

新手上路,请多包涵

我在项目中使用 Microsoft Azure SDK for Python 。我想将 Blob 从一个容器移动或复制到另一个容器。例如

https://demostorage.blob.core.windows.net/image-container/pretty.jpg

我想将这个 blob 移动到

https://demostorage.blob.core.windows.net/demo-container/

我在 python SDK 中找到了以下方法,但无法理解它。

 def copy_blob(self, container_name, blob_name,...):

我怎样才能做到这一点?谢谢

原文由 Shoaib Ijaz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 867
2 个回答

我已经这样做了。

 from azure.storage.blob import BlobService

def copy_azure_files(self):

        blob_service = BlobService(account_name='account_name', account_key='account_key')
        blob_name = 'pretty.jpg'
        copy_from_container = 'image-container'
        copy_to_container = 'demo-container'

        blob_url = blob_service.make_blob_url(copy_from_container, blob_name)
        # blob_url:https://demostorage.blob.core.windows.net/image-container/pretty.jpg

        blob_service.copy_blob(copy_to_container, blob_name, blob_url)

        #for move the file use this line
        blob_service.delete_blob(copy_from_container, blob_name)

我还没有找到任何 Blob Move 方法。所以我使用了复制方法,然后执行 Blob 函数。

这是我的解决方案。如果您有更好的方法来处理这一切,请与我分享。

注意:我没有使用任何自定义方法,所有这些方法都包含在 SDK 中。

原文由 Shoaib Ijaz 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用当前版本的 azure-storage-blob(目前为 v12.3.2),您将收到 ImportError:

 cannot import name 'BlockBlobService' from 'azure.storage.blob'

此代码适用于我的情况:

 from azure.storage.blob import BlobServiceClient

# Azure
# Get this from Settings/Access keys in your Storage account on Azure portal
account_name = "YOUR_AZURE_ACCOUNT_NAME"
connection_string = "YOUR_AZURE_CONNECTION_STRING"

# Source
source_container_name = "sourcecontainer"
source_file_path = "soure.jpg"
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
source_blob = (f"https://{account_name}.blob.core.windows.net/{source_container_name}/{source_file_path}")

# Target
target_container_name = "targetcontainer"
target_file_path = "target.jpg"
copied_blob = blob_service_client.get_blob_client(target_container_name, target_file_path)
copied_blob.start_copy_from_url(source_blob)

# If you would like to delete the source file
remove_blob = blob_service_client.get_blob_client(source_container_name, source_file_path)
remove_blob.delete_blob()

原文由 gailmichi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题