Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете добавить данные в блоб, создав добавочный блоб. Добавляемые блобы состоят из блоков, как блочные блобы, но они оптимизированы для операций добавления. Блобы добавления идеально подходят для сценариев, таких как ведение журналов данных с виртуальных машин.
Примечание.
В примерах этой статьи предполагается, что вы создали объект 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;
}
}