【发布时间】:2019-04-01 17:00:07
【问题描述】:
我需要恢复容器中的多个 Blob。存储帐户已启用软删除 10 天。 我看到 here 了解如何取消删除,但我在目录中递归地有多个 blob 被软删除
但是我没有通过 python 找到here。
我需要在 python 中列出和取消删除 blob
【问题讨论】:
-
您好,我的回答对您有帮助吗?
标签: python azure azure-blob-storage
我需要恢复容器中的多个 Blob。存储帐户已启用软删除 10 天。 我看到 here 了解如何取消删除,但我在目录中递归地有多个 blob 被软删除
但是我没有通过 python 找到here。
我需要在 python 中列出和取消删除 blob
【问题讨论】:
标签: python azure azure-blob-storage
正如 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。
【讨论】:
当然,您可以在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)
【讨论】:
blob.exist() 来判断所需blob 的真实状态。请参考本案例:stackoverflow.com/questions/52613916/…
要列出和删除,您可以使用下面的代码。带有 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")
【讨论】: