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


Добавление данных в добавочный BLOB-объект с помощью .NET

Вы можете добавить данные в блоб, создав добавочный блоб. Добавляемые блобы состоят из блоков, как блочные блобы, но они оптимизированы для операций добавления. Блобы добавления идеально подходят для сценариев, таких как ведение журналов данных с виртуальных машин.

Примечание.

В примерах этой статьи предполагается, что вы создали объект BLOBServiceClient с помощью руководства в статье "Начало работы с хранилищем BLOB-объектов Azure" и .NET . Блобы в Azure Storage организованы в контейнеры. Прежде чем вы сможете загрузить блоб, сначала необходимо создать контейнер. Сведения о создании контейнера см. в статье "Создание контейнера в службе хранилища Azure" с помощью .NET.

Создать дополняемый двоичный объект и добавить данные

Используйте эти методы для создания добавляемого блоба.

Используйте любой из этих методов, чтобы добавить данные в append blob.

Максимальный размер в байтах каждой операции добавления определяется свойством AppendBlobMaxAppendBlockBytes . В следующем примере создается блоб-дополнение и добавляются данные журнала в этот блоб. В этом примере свойство 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;
    }
}

См. также