Можно ли получить определенный блок из блочного BLOB-объекта Azure?

Я хочу получить определенный блок из большого двоичного объекта лазурного блока с идентификатором блока, возможно ли это? что-то вроде

var blockBlob = new BlockBlobClient(connectionString, containerName, blobName);
var blocklist = await GetBlobBlockList(blobName, cancellationToken);
var firstBlock = blocklist.First();
var memStream = new MemoryStream();
await blockBlob.DownloadStreamingAsync(memStream, firstBlock.Name);
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Laravel - это мощный PHP-фреймворк, используемый для создания масштабируемых и надежных веб-приложений. Одним из преимуществ Laravel является его...
Что такое двойные вопросительные знаки (??) в JavaScript?
Что такое двойные вопросительные знаки (??) в JavaScript?
Как безопасно обрабатывать неопределенные и нулевые значения в коде с помощью Nullish Coalescing
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как сделать компонент справочного центра с помощью TailwindCSS
Как сделать компонент справочного центра с помощью TailwindCSS
Справочный центр - это веб-сайт, где клиенты могут найти ответы на свои вопросы и решения своих проблем. Созданный для решения многих распространенных...
Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
1
0
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
Я хочу получить определенный блок из большого двоичного объекта лазурного блока с помощью blockId, это вообще возможно?

Это должно быть возможно сделать, однако это будет не так просто, как вы упомянули в своем примере кода.

Вот что вам нужно сделать:

  1. Получить список блоков. Каждый элемент в списке будет иметь идентификатор блока и размер блока.
  2. Предполагая, что вы хотите получить данные для блока «n», вы будете перебирать список от блока 0 до блока n - 1 и добавлять размер каждого блока.
  3. Затем вам нужно будет вызвать DownloadRangeToStreamAsync(Stream, Nullable<Int64>, Nullable<Int64>), где ваше значение offset будет суммой размера каждого блока, рассчитанного на шаге 2, а значение length будет размером блок, который вы хотите загрузить.

Вам нужно создать блочный BLOB-объект, ниже вы можете найти процедуру:

Вам нужно создать контейнер под учетной записью хранения следующим образом:

Внутри контейнера вы можете найти блочный BLOB-объект в свойствах, как показано ниже.

Чтобы получить идентификатор блока, вы можете следовать приведенному ниже коду:

Код:

using System;  
using System.Threading.Tasks;  
using Azure.Storage.Blobs;  
using Azure.Storage.Blobs.Models;

class Program  
{  
static async Task Main(string[] args)  
{  
string connectionString = "DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net";  
string containerName = "***";  
string blobName = "***.txt";  
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);  
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);  
BlobClient blobClient = containerClient.GetBlobClient(blobName);

  
BlockList blockList = await blobClient.GetBlockListAsync(BlockListType.All)  
string firstBlockId = blockList.Value.First().Name;  
Console.WriteLine("First block ID: " + firstBlockId);  
}  
}

После получения идентификатора блока теперь вы можете получить определенный блок, используя код ниже:

Код:

using System;  
using System.IO;  
using System.Threading;  
using System.Threading.Tasks;  
using Azure.Storage.Blobs;  
using Azure.Storage.Blobs.Models;

class Program  
{  
static async Task Main(string[] args)  
{  
string connectionString = "DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net";  
string containerName = "mycontainer---";  
string blobName = "myblob**";  
string blockId = "1234567**";  
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);  
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);  
BlobClient blobClient = containerClient.GetBlobClient(blobName);  
MemoryStream blockData = new MemoryStream();  
await blobClient.DownloadStreamingAsync(blockId, blockData, cancellationToken: CancellationToken.None);  
Console.WriteLine("Block data:");  
Console.WriteLine(Convert.ToBase64String(blockData.ToArray()));  
}  
}

В приведенном выше коде вам необходимо заменить строку подключения, имя контейнера, идентификатор блока, имя большого двоичного объекта, как показано ниже:

Выполнив описанную выше процедуру, я успешно добился успеха.

Но метод DownloadStreamingAsync возвращает сообщение об ошибке: Нет перегрузки для метода DownloadStreamingAsync, который принимает 3 аргумента...

Antonio Carlos 21.02.2023 05:36

Другие вопросы по теме