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