【问题标题】:list and restore soft deleted blobs - azure python列出并恢复软删除的 blob - azure python
【发布时间】:2019-04-01 17:00:07
【问题描述】:

我需要恢复容器中的多个 Blob。存储帐户已启用软删除 10 天。 我看到 here 了解如何取消删除,但我在目录中递归地有多个 blob 被软删除

但是我没有通过 python 找到here

我需要在 python 中列出和取消删除 blob

【问题讨论】:

  • 您好,我的回答对您有帮助吗?

标签: python azure azure-blob-storage


【解决方案1】:

正如 Jay 所提到的,目前您无法告诉 Azure 存储 REST API 仅返回软删除的 blob。您需要做的是列出 Blob 容器中的所有 Blob,并要求 REST API 在列表中包含已删除的 Blob。

因此您将调用list_blobs 方法,并且对于该方法中的include 参数,您需要指定include.DELETED。返回的 Blob 列表将包括已删除的 Blob。

然后您将遍历 blob 并找出哪些 blob 处于软删除状态,并将使用 undelete_blob 取消删除它们。

您还提到您还删除了子文件夹中的 blob。要列出所有 blob,您需要将 delimiter 指定为空字符串。然后,您还将在子文件夹中获得 blob。

【讨论】:

    【解决方案2】:

    当然,您可以在Python Storage SDK 中找到与REST API 对应的sdk 方法。

    from azure.storage.blob.baseblobservice import (
        BaseBlobService
    )
    
    accountName = "***"
    accountKey = "***"
    containerName = "***"
    blobName = "***"
    
    blobService = BaseBlobService(account_name=accountName, account_key=accountKey)
    
    blobService.undelete_blob(containerName, blobName)
    

    【讨论】:

    • 对于传递“blobName”,我如何列出已删除的 blob,因为目录中删除了多个 blob。我假设我需要列出已删除的 blob,然后将这些 blob 作为“blobName”传递给 blobService.undelete_blob(containerName, blobName)
    • @anudeep 根据我的搜索,没有这种方法可以直接在 sdk 或 rest api 中列出软删除 blob。您可以使用blob.exist() 来判断所需blob 的真实状态。请参考本案例:stackoverflow.com/questions/52613916/…
    • @anudeep 你好,有进展吗?我的回答对你有帮助吗?
    【解决方案3】:

    要列出和删除,您可以使用下面的代码。带有 include=Include.DELETED 的 blob_service.list_blobs 方法将列出所有已删除和未删除的 blob。要遍历目录内部,请使用 delimiter = ''。 此外,如果 blob 中有更多文件,那么您可以使用标记来翻阅所有结果。

    def restoreBlobs():
        blob_service = BlockBlobService(account_name=STORAGEACCOUNTNAME, account_key=STORAGEACCOUNTKEY)
        next_marker = None
        while True:
            blobs = blob_service.list_blobs(CONTAINERNAME, prefix=reverseSettledFolder, include=Include.DELETED, delimiter='', marker=next_marker, timeout=None)
            for blob in blobs:
                blob_service.undelete_blob(CONTAINERNAME, blob_name=blob.name, timeout=None)
                next_marker = blobs.next_marker
                if not next_marker:
                    break
        print ("done")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 2020-07-29
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多