Поделиться через


Добавление данных в добавочный 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;
    }
}

См. также раздел