Condividi tramite


Accodare dati a un BLOB di accodamento con .NET

È possibile accodare dati a un BLOB creando un BLOB di accodamento. I BLOB di aggiunta sono costituiti da blocchi, analogamente ai BLOB in blocchi, ma sono ottimizzati per le operazioni di aggiunta. I BLOB di accodamento sono ideali per scenari come la registrazione di dati delle macchine virtuali.

Nota

Gli esempi in questo articolo presuppongono che sia stato creato un oggetto BlobServiceClient usando le indicazioni contenute nell'articolo Introduzione ad Archiviazione BLOB di Azure e .NET. I BLOB in Archiviazione di Azure sono organizzati in contenitori. Prima di poter caricare un BLOB, è necessario creare un contenitore. Per informazioni su come creare un contenitore, vedere Creare un contenitore in Archiviazione di Azure con .NET.

Creare un BLOB di accodamento e accodare dati

Usare questi metodi per creare un BLOB di accodamento.

Usare uno di questi metodi per accodare dati al BLOB di accodamento:

La dimensione massima in byte di ogni operazione di accodamento è definita dalla proprietà AppendBlobMaxAppendBlockBytes. L'esempio seguente crea un BLOB di accodamento e accodare i dati di log al BLOB. In questo esempio viene usata la proprietà AppendBlobMaxAppendBlockBytes per determinare se sono necessarie più operazioni di accodamento.

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

Vedi anche