【发布时间】:2021-09-03 00:00:41
【问题描述】:
我在尝试批量删除容器中的 blob 时遇到了一种非常奇怪的行为。具有以下代码(请注意,出于简洁和安全原因,省略或编辑了某些代码):
var blobServiceClient = GetAzureBlobServiceClient();
var container = await BuildAzureContainer(blobServiceClient);
var blobsToBeDeleted = new List<Uri>();
var thumbImage = removedMedia.Path.GetThumbImageName();
blobsToBeDeleted.Add(new Uri("https://account-name.blob.core.windows.net/container-name/blob-name"));
if (!string.IsNullOrEmpty(thumbImage))
{
blobsToBeDeleted.Add(new Uri("https://account-name.blob.core.windows.net/container-name/thumbs/blob-name"));
}
if (blobsToBeDeleted.Any())
{
var batch = blobServiceClient.GetBlobBatchClient();
await batch.DeleteBlobsAsync(blobsToBeDeleted, DeleteSnapshotsOption.IncludeSnapshots);
}
使用Azure.Storage.Blobs(12.9.0) 和Azure.Storage.Blobs.Batch(12.6.0)
就在我尝试进行批量删除之前,我正在将图像上传到 Azure 并确认它们已上传并存在于容器中。 Azure 的响应是:
System.AggregateException: 2 batch operation(s) failed. (The specified blob does not
exist.
RequestId: **removed**
Time:2021-06-18T08:16:15.2409894Z
Status: 404 (The specified blob does not exist.)
ErrorCode: BlobNotFound
还尝试使用以下方法获取 Uri:
container.GetBlobClient("blob-name").Uri
或
container.GetBlobClient("thumbs/blob-name}").Uri
它也返回一个正确的 url,但没有运气。
我已经检查过,我添加到列表中的 URL 与 Azure 中的活动 URL 完全相同。无论我在做什么,响应都是一样的——所有批处理操作都返回BlobNotFound。例如,如果对相同的 blob 执行以下操作:
BlobClient blob = container.GetBlobClient("container-name/blob-name");
await blob.DeleteAsync(DeleteSnapshotsOption.IncludeSnapshots);
blob 已成功删除。我真的在为此苦苦挣扎,找不到导致这种行为的原因,尤其是当我能够删除相同的 blob 但不能批量删除时。我是否遗漏了什么或 SDK 发生了什么问题? 决定在 GitHub 开新问题之前先写到这里。
任何帮助将不胜感激。
附:我确信这在几个月前还有效,唯一改变的是 NuGet 包更新。
【问题讨论】:
-
我刚刚在这里提出了一个问题:github.com/Azure/azure-sdk-for-net/issues/24093.
标签: c# azure azure-blob-storage