Я хочу получить определенный блок из большого двоичного объекта лазурного блока с идентификатором блока, возможно ли это? что-то вроде
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);
Я хочу получить определенный блок из большого двоичного объекта лазурного блока с помощью blockId, это вообще возможно?
Это должно быть возможно сделать, однако это будет не так просто, как вы упомянули в своем примере кода.
Вот что вам нужно сделать:
0
до блока n - 1
и добавлять размер каждого блока.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 аргумента...