如何使用 blockblobservice 的 delete_blob 方法删除 azure 容器内的文件夹(blob)?

Sru*_*thi 3 python azure azure-storage azure-storage-blobs python-3.x

delete_blob()似乎只删除容器内的文件以及容器内的文件夹和子文件夹。但是我在尝试从容器中删除文件夹时在 python 中看到以下错误。

Client-Request-ID=7950669c-2c4a-11e8-88e7-00155dbf7128 重试策略不允许重试:Server-Timestamp=Tue, 20 Mar 2018 14:25:00 GMT, Server-Request-ID=54d1a1e-d6- 007b-5e57-c08528000000,HTTP 状态码=404,异常=指定的 blob 不存在。ErrorCode: BlobNotFoundBlobNotFound指定的 blob 不存在。RequestId:54d1a5d6-b01e-007b-5e57-c08528000025004T :01.2130063Z。

azure.common.AzureMissingResourceHttpError: 指定的 blob 不存在。ErrorCode: BlobNotFound BlobNotFound指定的 blob 不存在。RequestId:54d1a5d6-b01e-007b-5e57-c08528000000 时间:2018-03-20T14:25:01.2130063Z

有人可以在这里帮忙吗?

Ada*_*ure 5

从这个过程中有两件事需要理解,你可以使用delete_blob删除特定的文件、文件夹、图像...(blob),但是如果你想删除容器,你必须使用delete_container它将删除其中的所有 blob,这里是我创建的一个示例,用于删除路径/虚拟文件夹中的 blob:

from azure.storage.blob import BlockBlobService

block_blob_service = BlockBlobService(account_name='yraccountname', account_key='accountkey')
print("Retreiving blobs in specified container...")
blob_list=[]
container="containername"
def list_blobs(container):
        try:

                global blob_list
                content = block_blob_service.list_blobs(container)
                print("******Blobs currently in the container:**********")
                for blob in content:
                        blob_list.append(blob.name)
                        print(blob.name)
        except:
                print("The specified container does not exist, Please check the container name or if it exists.")
list_blobs(container)
print("The list() is:")
print(blob_list)
print("Delete this blob: ",blob_list[1])
#DELETE A SPECIFIC BLOB FROM THE CONTAINER
block_blob_service.delete_blob(container,blob_list[1],snapshot=None)
list_blobs(container)
Run Code Online (Sandbox Code Playgroud)

请参考我的 repo 中的代码以及自述部分的解释,以及新的存储脚本:https : //github.com/adamsmith0016/Azure-storage


Gau*_*tri 5

在 Azure Blob 存储中,不存在这样的文件夹。它只是 blob 名称的前缀。例如,如果您看到一个名为 的文件夹images,其中包含一个名为 的 blob myfile.png,则 blob 的名称基本上是images/myfile.png。因为文件夹实际上并不存在(它们是虚拟的),所以不能直接删除文件夹。

您需要做的是单独删除该文件夹中的所有 blob(或者换句话说,删除名称以该虚拟文件夹名称/路径开头的 blob。删除所有 blob 后,该文件夹将自动消失。

为了实现这一点,首先您需要获取名称以虚拟文件夹路径开头的所有 blob。为此,您将使用list_blobs方法并在prefix参数中指定虚拟文件夹路径。这将为您提供以该前缀开头的 blob 列表。获得该列表后,您将一一删除 blob。