Добавление данных в добавочный BLOB-объект с помощью .NET
Вы можете добавить данные в большой двоичный объект, создав добавочный BLOB-объект. Добавочные большие двоичные объекты состоят из блоков, как и блочные, но оптимизированы для операций добавления. Добавочные большие двоичные объекты идеально подходят для таких сценариев, как сбор данных журналов из виртуальных машин.
Примечание
В примерах, приведенных в этой статье, предполагается, что вы создали объект BlobServiceClient, используя инструкции в статье Начало работы с Хранилищем BLOB-объектов Azure и .NET. Большие двоичные объекты в службе хранилища Azure упорядочиваются в контейнеры. Прежде чем вы сможете отправить большой двоичный объект, сперва необходимо создать контейнер. Сведения о создании контейнера см. в статье Создание контейнера в службе хранилища Azure с помощью .NET.
Создание добавочного большого двоичного объекта и добавление данных
Ниже приведены методы создания добавочного BLOB-объекта.
Используйте любой из приведенных ниже методов, чтобы добавить данные в этот добавочный BLOB-объект.
Максимальный размер в байтах каждой операции добавления определяется свойством AppendBlobMaxAppendBlockBytes. В следующем примере показано создание добавочного BLOB-объекта и добавление в него данных журнала. Для определения необходимости нескольких операций добавления в этом примере используется свойство AppendBlobMaxAppendBlockBytes.
static async Task AppendToBlob(
BlobContainerClient containerClient,
MemoryStream logEntryStream,
string logBlobName)
{
AppendBlobClient appendBlobClient = containerClient.GetAppendBlobClient(logBlobName);
await appendBlobClient.CreateIfNotExistsAsync();
int maxBlockSize = appendBlobClient.AppendBlobMaxAppendBlockBytes;
long bytesLeft = logEntryStream.Length;
byte[] buffer = new byte[maxBlockSize];
while (bytesLeft > 0)
{
int blockSize = (int)Math.Min(bytesLeft, maxBlockSize);
int bytesRead = await logEntryStream.ReadAsync(buffer.AsMemory(0, blockSize));
await using (MemoryStream memoryStream = new MemoryStream(buffer, 0, bytesRead))
{
await appendBlobClient.AppendBlockAsync(memoryStream);
}
bytesLeft -= bytesRead;
}
}