Compartilhar via


Acrescentar dados a um blob anexado com .NET

Você pode acrescentar dados a um blob criando um blob de acréscimo. Blobs de acréscimo são compostos de blocos, como blobs de blocos, mas são otimizados para operações de acréscimo. Blobs de acréscimo são ideais para cenários como o registro de dados das máquinas virtuais.

Observação

Os exemplos deste artigo pressupõem que você tenha criado um objeto BlobServiceClient usando as diretrizes descritas no artigo Introdução ao Armazenamento de Blobs do Azure e ao .NET. Os blobs no Armazenamento do Azure são organizados em contêineres. Antes de carregar um blob, é necessário primeiro criar um contêiner. Para saber como criar um contêiner, confira Criar um contêiner no Armazenamento do Azure com o .NET.

Criar um blob de acréscimo e acrescentar dados

Use esses métodos para criar um blob de acréscimo.

Use qualquer um desses métodos para acrescentar dados a esse blob de acréscimo:

O tamanho máximo em bytes de cada operação de acréscimo é definido pela propriedade AppendBlobMaxAppendBlockBytes. O exemplo a seguir cria um blob de acréscimo e acrescenta dados de log a esse blob. Este exemplo usa a propriedade AppendBlobMaxAppendBlockBytes para determinar se várias operações de acréscimo são necessárias.

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;
    }
}

Confira também