You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BlockBlobService的delete_blob方法删除Azure容器文件夹遇404错误求助

解决Azure Blob存储删除虚拟文件夹的问题

我之前也踩过这个坑!其实Azure Blob存储里根本没有真正的「文件夹」,那些看起来像文件夹的层级都是通过blob名称里的前缀(比如docs/reports/)模拟出来的——说白了,所谓的「文件夹」本身并不是一个实际存在的blob对象,所以你直接用delete_blob()去删它,自然会报BlobNotFound的404错误。

要删除整个「文件夹」(包括里面所有文件和子文件夹),正确的做法是:先找出所有以该文件夹前缀开头的blob,然后逐个删除它们。当所有匹配前缀的blob都被删除后,那个虚拟的「文件夹」也就自动消失了。

具体实现步骤(Python)

  1. 初始化BlockBlobService实例,传入你的存储账户名和密钥
  2. 定义要删除的虚拟文件夹前缀(必须带上末尾的斜杠,不然会误匹配到名称类似的blob,比如前缀docs会匹配docs.txt和docs/report.pdf)
  3. 分页获取所有匹配该前缀的blob(如果文件夹里文件很多,list_blobs会分页返回)
  4. 循环删除每个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:05:09