Как проверить, существует Blob или нет в удаленном списке - PullRequest
0 голосов
/ 02 октября 2018

Следующий код сможет увидеть, существует ли BLOB-объект или нет.

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

if (blob.Exists())

Как проверить, существует или нет BLOB-объект в удаленном списке?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Отличный вопрос!Поэтому, если большой двоичный объект удаляется и если вы проверяете его существование, вызывая метод 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!");
        }
    }
0 голосов
/ 03 октября 2018

Вы можете использовать blob.Exists(), чтобы проверить, существует ли большой двоичный объект или нет, затем используйте container.ListBlobs(useFlatBlobListing: true, blobListingDetails: BlobListingDetails.Deleted), чтобы вывести список всех больших двоичных объектов, включая удаленные большие двоичные объекты (все мягкие удаленные и активные большие двоичные объекты в контейнере), проверить большой двоичный объект, если он существует в коллекции..

...