使用BlockBlobService的delete_blob方法删除Azure容器文件夹遇404错误求助
解决Azure Blob存储删除虚拟文件夹的问题
我之前也踩过这个坑!其实Azure Blob存储里根本没有真正的「文件夹」,那些看起来像文件夹的层级都是通过blob名称里的前缀(比如docs/reports/)模拟出来的——说白了,所谓的「文件夹」本身并不是一个实际存在的blob对象,所以你直接用delete_blob()去删它,自然会报BlobNotFound的404错误。
要删除整个「文件夹」(包括里面所有文件和子文件夹),正确的做法是:先找出所有以该文件夹前缀开头的blob,然后逐个删除它们。当所有匹配前缀的blob都被删除后,那个虚拟的「文件夹」也就自动消失了。
具体实现步骤(Python)
- 初始化
BlockBlobService实例,传入你的存储账户名和密钥 - 定义要删除的虚拟文件夹前缀(必须带上末尾的斜杠,不然会误匹配到名称类似的blob,比如前缀
docs会匹配docs.txt和docs/report.pdf) - 分页获取所有匹配该前缀的blob(如果文件夹里文件很多,
list_blobs会分页返回) - 循环删除每个blob
代码示例
from azure.storage.blob import BlockBlobService # 替换成你的存储账户信息 storage_account_name = "your-storage-account-name" storage_account_key = "your-storage-account-key" container_name = "your-container-name" # 要删除的虚拟文件夹,末尾的斜杠不能少 target_folder_prefix = "my-target-folder/" # 初始化Blob服务 block_blob_service = BlockBlobService( account_name=storage_account_name, account_key=storage_account_key ) # 分页获取所有匹配前缀的blob,处理大量文件的情况 continuation_token = None while True: # 获取当前页的blob列表 blob_list = block_blob_service.list_blobs( container_name, prefix=target_folder_prefix, continuation_token=continuation_token ) # 逐个删除blob for blob in blob_list: print(f"正在删除: {blob.name}") block_blob_service.delete_blob(container_name, blob.name) # 更新续传token,没有的话就退出循环 continuation_token = blob_list.continuation_token if not continuation_token: break print("所有虚拟文件夹下的内容已删除完成!")
额外说明
- 如果只想删除「文件夹」下的直接文件,不递归子文件夹,可以在
list_blobs里加上delimiter='/'参数,这样只会返回该前缀下的一级blob,不会包含子文件夹里的内容。 - 如果你用的是较新的Azure Blob Storage SDK(比如
azure.storage.blob的v12+版本),API会有所不同,但核心逻辑还是一样的:通过前缀筛选blob,批量删除。
内容的提问来源于stack exchange,提问作者Sruthi
相关产品推荐
相关产品推荐

