Отличный вопрос!Поэтому, если большой двоичный объект удаляется и если вы проверяете его существование, вызывая метод Exists()
, он всегда сообщит вам, что большого двоичного объекта не существует.Вы получите ошибку 404 (NotFound)
, если попытаетесь извлечь атрибуты.
Однако вы все равно можете узнать, находится ли 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!");
}
}