如何验证Blob是否存在于已删除列表中

问题描述 投票:0回答:2

以下代码将能够查看 blob 是否存在。

var blob = client.GetContainerReference(containerName).GetBlockBlobReference(blobFileName);

if (blob.Exists())

如何验证 blob 是否存在于已删除列表中?

azure azure-storage azure-blob-storage
2个回答
3
投票

您可以使用

blob.Exists()
验证 Blob 是否存在,然后使用
container.ListBlobs(useFlatBlobListing: true, blobListingDetails: BlobListingDetails.Deleted)
列出所有 Blob,包括已删除的 Blob(容器中的所有软删除和活动 Blob),验证集合中是否存在 Blob。


1
投票

好问题!因此,如果一个 Blob 被删除,并且您通过调用

Exists()
方法检查它是否存在,它总是会告诉您该 Blob 不存在。如果您尝试获取属性,您将收到
404 (NotFound)
错误。

但是,您仍然可以查明 blob 是否处于已删除状态,但为此您需要列出容器中的 blob。由于 Blob 容器可能包含数千个 Blob,为了减少对存储服务的多次调用,您应该列出以 Blob 名称开头的 Blob 名称。

这是示例代码:

    static void CheckForDeletedBlob()
    {
        var containerName = "container-name";
        var blobName = "blob-name";
        var storageCredetials = new StorageCredentials(accountName, accountKey);
        var storageAccount = new CloudStorageAccount(storageCredetials, true);
        var blobClient = storageAccount.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference(containerName);
        var blob = container.GetBlockBlobReference(blobName);
        var exists = blob.Exists();
        if (!exists)
        {
            var blobs = container.ListBlobs(prefix: blob.Name, useFlatBlobListing: true, blobListingDetails: BlobListingDetails.Deleted).ToList();
            if (blobs.FirstOrDefault(b => b.Uri.AbsoluteUri == blob.Uri.AbsoluteUri) == null)
            {
                Console.WriteLine("Blob does not exist!");
            }
            else
            {
                Console.WriteLine("Blob exists but is in deleted state.");
            }
        }
        else
        {
            Console.WriteLine("Blob exists!");
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.