Проверка, существует ли блоб в устройстве хранения данных Azure

У меня есть очень простой вопрос (я надеюсь!) - я просто хочу узнать, существует ли блоб (с именем, которое я определил) в конкретном контейнере. Я буду загружать его, если это действительно будет существовать, и если это не сделает затем, то я сделаю что-то еще.

Я сделал некоторый поиск на межтрубах и по-видимому там раньше был функцией под названием DoesExist или что-то подобное..., но как со столь многими API Azure, это больше, кажется, не там (или если это, имеет очень умно замаскированное имя).

119
задан abatishchev 21 September 2018 в 05:29
поделиться

3 ответа

Примечание: этот ответ сейчас устарел. См. Ответ Ричарда, чтобы узнать, как легко проверить существование

Нет, вы не упускаете чего-то простого ... мы хорошо поработали, скрывая этот метод в новой библиотеке StorageClient. :)

Я только что написал сообщение в блоге, чтобы ответить на ваш вопрос: http://blog.smarx.com/posts/testing-existence-of-a-windows-azure-blob .

Краткий ответ: используйте CloudBlob.FetchAttributes (), который выполняет HEAD-запрос в отношении большого двоичного объекта.

49
ответ дан 24 November 2019 в 01:47
поделиться

Если большой двоичный объект является общедоступным, вы, конечно, можете просто отправить HTTP-запрос HEAD - с любого из множества языков / сред / платформ, которые знают как это сделать - и проверьте ответ.

Основные API-интерфейсы Azure - это HTTP-интерфейсы на основе RESTful XML. Библиотека StorageClient - одна из многих возможных оберток вокруг них.Вот еще одно, что Шрирам Кришнан сделал на Python:

http://www.sriramkrishnan.com/blog/2008/11/python-wrapper-for-windows-azure.html

Он также показывает, как аутентифицироваться в Уровень HTTP.

Я проделал то же самое на C #, потому что предпочитаю смотреть на Azure через призму HTTP / REST, а не через призму библиотеки StorageClient. Некоторое время я даже не удосужился реализовать метод ExistsBlob. Все мои капли были общедоступными, и выполнить HTTP HEAD было тривиально.

9
ответ дан 24 November 2019 в 01:47
поделиться

Кажется неубедительным, что вам нужно поймать исключение, чтобы проверить, существует ли blob.

public static bool Exists(this CloudBlob blob)
{
    try
    {
        blob.FetchAttributes();
        return true;
    }
    catch (StorageClientException e)
    {
        if (e.ErrorCode == StorageErrorCode.ResourceNotFound)
        {
            return false;
        }
        else
        {
            throw;
        }
    }
}
16
ответ дан 24 November 2019 в 01:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: