以下代码将能够查看blob是否存在。
var blob = client.GetContainerReference(containerName).GetBlockBlobReference(blobFileName);
if (blob.Exists())
如何验证blob中是否也存在blob?
答案 0 :(得分:2)
您可以使用blob.Exists()
验证blob是否存在,然后使用container.ListBlobs(useFlatBlobListing: true, blobListingDetails: BlobListingDetails.Deleted)
列出所有blob,包括已删除的blob(容器中所有软删除的和活动的blob),并验证blob是否存在于集合中。
答案 1 :(得分: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 does not exist!");
}
}