Azure BlobBatchClient.DeleteBlobsAsync调用始终返回404 BlobNotFound求助
Azure Blob批量删除返回BlobNotFound问题排查及解决方案
核心原因
你遇到的是Azure.Storage.Blobs.Batch 12.6.0版本的已知兼容性Bug,该版本在处理传入的完整Blob Uri时存在内部路径解析/编码错误,会错误识别Blob路径,即使传入Uri和实际Blob地址完全一致,也会返回BlobNotFound错误。该问题在12.7.0及更高版本中已被官方修复。
解决方案
方案1:升级依赖包(优先推荐)
直接将两个相关NuGet包升级到最新稳定版即可,无需修改原有业务代码:
Azure.Storage.Blobs升级至12.10.0及以上版本Azure.Storage.Blobs.Batch升级至12.7.0及以上版本
方案2:无需升级包的临时替代方案
如果当前环境不方便升级依赖版本,可以改用手动构造批量请求的方式实现:
if (blobsToBeDeleted.Any()) { var batch = blobServiceClient.GetBlobBatchClient(); foreach (var blobUri in blobsToBeDeleted) { var blobClient = new BlobClient(blobUri); batch.DeleteBlob(blobClient, DeleteSnapshotsOption.IncludeSnapshots); } await batch.SubmitBatchAsync(); }
额外注意事项
你提供的单独删除示例代码存在参数冗余问题:container.GetBlobClient方法只需传入Blob在当前容器内的相对路径即可,不需要重复携带容器名,正确写法如下:
BlobClient blob = container.GetBlobClient("blob-name"); await blob.DeleteAsync(DeleteSnapshotsOption.IncludeSnapshots);
如果你的存储账户开启了ADLS Gen2分层命名空间,也需要确保Azure.Storage.Blobs.Batch版本在12.7.0及以上,才能正常支持分层命名空间下的Blob批量删除操作。
内容的提问来源于stack exchange,提问作者Ivaylo
相关产品推荐
相关产品推荐

