#c# #azure #azure-blob-storage
#c# #azure #azure-blob-хранилище
Вопрос:
Я работаю с большими двоичными объектами в хранилище Azure. Мне нужно получить незафиксированные блоки, насколько я выяснил, мне нужно вызвать «Получить список блокировок». Вот в чем проблема.
Существует ли функция «Получить список блокировок» в C # (Microsoft.WindowsAzure.StorageClient.dll )?
В MSDN говорится только о выполнении HTTP-запроса, ни слова об API StorageClient.
Если эта функция не существует в C #, есть ли какие-либо планы по включению ее в C # API?
Ответ №1:
Я думаю, что то, что вы ищете, — это метод DownloadBlockList в CloudBlockBlob http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.cloudblockblob.downloadblocklist.aspx
Там есть пример кода в MSDN — http://msdn.microsoft.com/en-us/library/ee772860.aspx
static void DownloadBlockListForBlob(Uri blobEndpoint, string accountName, string accountKey)
{
//Create service client for credentialed access to the Blob service, using development storage.
CloudBlobClient blobClient = new CloudBlobClient(blobEndpoint, new StorageCredentialsAccountAndKey(accountName, accountKey));
//Get a reference to a block blob.
CloudBlockBlob blockBlob = blobClient.GetBlockBlobReference("mycontainer/mybinaryblob.mp3");
//Download the committed blocks in the block list.
foreach (var blockListItem in blockBlob.DownloadBlockList())
{
Console.WriteLine("Block ID: " blockListItem.Name);
Console.WriteLine("Block size: " blockListItem.Size);
Console.WriteLine("Is block committed?: " blockListItem.Committed);
Console.WriteLine();
}
//Download only uncommitted blocks.
foreach (var blockListItem in blockBlob.DownloadBlockList(BlockListingFilter.Uncommitted))
{
Console.WriteLine("Block ID: " blockListItem.Name);
Console.WriteLine("Block size: " blockListItem.Size);
Console.WriteLine("Is block committed?: " blockListItem.Committed);
Console.WriteLine();
}
//Download all blocks.
foreach (var blockListItem in blockBlob.DownloadBlockList(BlockListingFilter.All))
{
Console.WriteLine("Block ID: " blockListItem.Name);
Console.WriteLine("Block size: " blockListItem.Size);
Console.WriteLine("Is block committed?: " blockListItem.Committed);
Console.WriteLine();
}
}
Комментарии:
1. Ну, вот и все. Я уже пробовал этот метод, но без опции фильтра. Странно, что метод empty возвращает не все блоки… Это сбило меня с толку, и я подумал, что незафиксированный блок не возвращается с помощью этого метода. Спасибо, что вы указали на это!
2. Ваши ссылки на MSDN устарели: «К сожалению, запрошенная вами страница не может быть найдена».
Ответ №2:
Возможно, вы захотите изучить класс GetBlockListResponse в Microsoft.WindowsAzure.Клиент хранилища.Пространство имен протокола: http://msdn.microsoft.com/en-us/library/ee758632.aspx
Надеюсь, это поможет
Спасибо
Gaurav