У меня есть очень простой вопрос (я надеюсь!) - я просто хочу узнать, существует ли блоб (с именем, которое я определил) в конкретном контейнере. Я буду загружать его, если это действительно будет существовать, и если это не сделает затем, то я сделаю что-то еще.
Я сделал некоторый поиск на межтрубах и по-видимому там раньше был функцией под названием DoesExist или что-то подобное..., но как со столь многими API Azure, это больше, кажется, не там (или если это, имеет очень умно замаскированное имя).
Примечание: этот ответ сейчас устарел. См. Ответ Ричарда, чтобы узнать, как легко проверить существование
Нет, вы не упускаете чего-то простого ... мы хорошо поработали, скрывая этот метод в новой библиотеке StorageClient. :)
Я только что написал сообщение в блоге, чтобы ответить на ваш вопрос: http://blog.smarx.com/posts/testing-existence-of-a-windows-azure-blob .
Краткий ответ: используйте CloudBlob.FetchAttributes (), который выполняет HEAD-запрос в отношении большого двоичного объекта.
Если большой двоичный объект является общедоступным, вы, конечно, можете просто отправить 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 было тривиально.
Кажется неубедительным, что вам нужно поймать исключение, чтобы проверить, существует ли 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;
}
}
}