Udostępnij za pośrednictwem


Dołączanie danych do dołączanego obiektu blob za pomocą platformy .NET

Dane można dołączyć do obiektu blob, tworząc uzupełnialne obiekty blob. Uzupełnialne obiekty blob również składają się z bloków, podobnie jak blokowe obiekty blob, lecz są zoptymalizowane pod kątem operacji dołączania. Uzupełnialne obiekty blob doskonale sprawdzają się w sytuacjach takich jak zapisywanie danych dzienników z maszyn wirtualnych.

Uwaga

W przykładach w tym artykule założono, że utworzono obiekt BlobServiceClient, korzystając ze wskazówek w artykule Wprowadzenie do Azure Blob Storage i platformy .NET. Obiekty blob w usłudze Azure Storage są zorganizowane w kontenery. Przed przekazaniem obiektu blob należy najpierw utworzyć kontener. Aby dowiedzieć się, jak utworzyć kontener, zobacz Tworzenie kontenera w usłudze Azure Storage przy użyciu platformy .NET.

Tworzenie uzupełnialnych obiektów blob i dołączanie danych

Użyj tych metod, aby utworzyć uzupełnialne obiekty blob.

Użyj jednej z tych metod, aby dołączyć dane do tego uzupełnialnych obiektów blob:

Maksymalny rozmiar w bajtach każdej operacji dołączania jest definiowany przez właściwość AppendBlobMaxAppendBlockBytes . Poniższy przykład tworzy uzupełnialne obiekty blob i dołącza dane dziennika do tego obiektu blob. W tym przykładzie użyto właściwości AppendBlobMaxAppendBlockBytes w celu określenia, czy wymagane są wiele operacji dołączania.

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

Zobacz też