You need to enable JavaScript to run this app. 如何使用Azure存储Blob服务编程删除未提交块以解决上传报错
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Azure存储Blob服务编程删除未提交块以解决上传报错

错误说明

你遇到的400 InvalidBlobOrBlock错误是Azure Blob存储分块上传场景的常见错误,完整报错信息如下:

code:'InvalidBlobOrBlock'
message:'The specified blob or block content is invalid.\nRequestId:1b015a55-201e-00be-7b1c-7e8fb8000000\nTime:2021-07-21T10:35:48.0075829Z'
name:'StorageError'
requestId:'1b015a55-201e-00be-7b1c-7e8fb8000000'
stack:'StorageError: The specified blob or block content is invalid
statusCode:400

触发原因是前一次分块上传任务中断后,残留的未提交块和当前重试上传的块ID、块内容匹配规则不一致。未提交块默认会在Azure存储服务中保留7天,到期才会自动清理。

清理未提交块的实现方案

无需单独调用删除接口,给目标块Blob提交空的块列表即可直接清除所有残留的未提交块,不同开发语言的实现示例如下:

  • .NET SDK(Azure.Storage.Blobs v12+版本)
// 初始化块Blob客户端
var blockBlobClient = new BlockBlobClient("存储账户连接字符串", "容器名称", "目标Blob名称");
// 提交空块列表,清理全部未提交块
await blockBlobClient.CommitBlockListAsync(new List<string>());
// 执行完成后即可正常重试分块上传
  • Python SDK(azure-storage-blob v12+版本)
from azure.storage.blob import BlockBlobClient

block_blob_client = BlockBlobClient.from_connection_string(
    conn_str="存储账户连接字符串",
    container_name="容器名称",
    blob_name="目标Blob名称"
)
# 提交空块列表清理未提交块
block_blob_client.commit_block_list(block_list=[])
  • REST API 实现
    直接调用目标Blob的Put Block List接口,请求体中传入空的BlockList节点即可:
<?xml version="1.0" encoding="utf-8"?>
<BlockList>
</BlockList>
替代方案与注意事项
  • 如果业务允许,可直接删除目标Blob后重新上传,操作更简单,调用各SDK的DeleteIfExists相关接口即可完成
  • 若对重试时效要求不高,也可以等待7天,未提交块到期后会被Azure服务自动回收
  • 建议每次分块上传任务生成唯一的块ID前缀,避免和历史残留块ID重复,从源头降低该错误的触发概率

内容的提问来源于stack exchange,提问作者s d

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 03:15:03