Проверка наличия капли в Azure Storage
49847 просмотра
9 ответа
2341 Репутация автора
У меня очень простой вопрос (надеюсь!). Я просто хочу узнать, существует ли в конкретном контейнере blob (с именем, который я определил). Я буду загружать его, если он существует, и если он этого не сделает, я сделаю что-то еще.
Я сделал несколько поисков на межтрубках, и, видимо, там была функция, называемая DoExist или что-то подобное ... но, как и во многих API Azure, это уже не похоже (или, если это так, очень умное замаскированное имя).
Автор: John Источник Размещён: 15.04.2010 05:23Ответы (9)
48 плюса
47542 Репутация автора
Примечание. Этот ответ устарел сейчас. Пожалуйста, см. Ответ Ричарда для простого способа проверить существование
Нет, вам не хватает чего-то простого ... мы неплохо скрыли этот метод в новой библиотеке StorageClient. :)
Я просто написал сообщение в блоге, чтобы ответить на ваш вопрос: http://blog.smarx.com/posts/testing-existence-of-a-windows-azure-blob .
Короткий ответ: используйте CloudBlob.FetchAttributes (), который выполняет запрос HEAD против blob.
Автор: smarx Размещён: 16.04.2010 05:257 плюса
146 Репутация автора
Если blob является общедоступным, вы можете, конечно, просто отправить запрос 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.
Автор: judell Размещён: 17.04.2010 04:4915 плюса
151 Репутация автора
Похоже, что вам нужно поймать исключение, чтобы проверить, существует ли 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;
}
}
}
Автор: nathanw
Размещён: 04.05.2010 09:10
1 плюс
400 Репутация автора
Если вам не нравится использовать метод исключения, то базовая версия c #, о которой предлагает Judell, приведен ниже. Остерегайтесь, хотя вы действительно должны обрабатывать и другие возможные ответы.
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);
myReq.Method = "HEAD";
HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
if (myResp.StatusCode == HttpStatusCode.OK)
{
return true;
}
else
{
return false;
}
Автор: Mad Pierre
Размещён: 18.11.2011 08:49
5 плюса
2268 Репутация автора
Новая библиотека хранения Windows Azure уже содержит метод Exist (). Это находится в Microsoft.WindowsAzure.Storage.dll.
Доступно как пакет NuGet
Создано: Microsoft
Id: WindowsAzure.Storage
Версия: 2.0.5.1
163 плюса
4862 Репутация автора
Новый API имеет вызов функции .Exists (). Просто убедитесь, что вы используете GetBlockBlobReference
, который не выполняет вызов на сервер. Это облегчает работу:
public static bool BlobExistsOnCloud(CloudBlobClient client,
string containerName, string key)
{
return client.GetContainerReference(containerName)
.GetBlockBlobReference(key)
.Exists();
}
Автор: Richard
Размещён: 10.05.2013 02:58
1 плюс
10167 Репутация автора
С обновленным SDK, когда у вас есть CloudBlobReference, вы можете вызвать Exists () в своей ссылке.
Автор: Babak Naffas Размещён: 05.08.2013 10:160 плюса
974 Репутация автора
Так я это делаю. Показывает полный код для тех, кто в нем нуждается.
// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("AzureBlobConnectionString"));
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("ContainerName");
// Retrieve reference to a blob named "test.csv"
CloudBlockBlob blockBlob = container.GetBlockBlobReference("test.csv");
if (blockBlob.Exists())
{
//Do your logic here.
}
Автор: Apollo
Размещён: 26.02.2018 02:33
0 плюса
20870 Репутация автора
Хотя большинство ответов здесь технически корректны, большинство примеров кода делают синхронные / блокирующие вызовы. Если вы не связаны очень старой платформой или базой кода, HTTP-вызовы всегда должны выполняться асинхронно, и SDK полностью поддерживает его в этом случае. Просто используйте ExistsAsync()
вместо Exists()
.
bool exists = await client.GetContainerReference(containerName)
.GetBlockBlobReference(key)
.ExistsAsync();
Автор: Todd Menier
Размещён: 17.10.2018 04:06
Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- azure Что такое «облачная ОС»?
- azure Выбор между очередями служб .NET Service Bus и Azure Queue Service
- azure Расходуемые ресурсы на лазурном
- azure Строка подключения к учетной записи облачного хранилища Azure
- azure Проверка наличия капли в Azure Storage
- azure Хранилище Azure: загруженные файлы с нулевым размером байтов
- azure-blob-storage хранилище BLOB-объектов Azure "Не найдено действительной комбинации данных учетной записи"
- azure-blob-storage Использование хранилища BLOB-объектов Azure с веб-сайтом java MVC Azure
- azure-blob-storage Длина файла равна 0 при воссоздании файла из URI или исходного пути к файлу [getExternalFilesDir (тип String) против getFilesDir ()]
- azure-blob-storage Код C # для копирования файлов из общей папки Azure в BLOB-объект Azure
- azure-blob-storage Power BI - динамически генерировать запросы