CloudAppendBlob с возможностью поиска - PullRequest
0 голосов
/ 12 марта 2020

У меня есть следующий сценарий.

  • Функция azure с таймером запуска в плане потребления (это означает 1,5 ГБ ОЗУ)
  • , когда таймер попал в пару файлов будут заархивированы и затем загружены в azure blob как CloudAppendBlob напрямую с использованием потока, поэтому никакие данные не должны записываться локально или в память из-за доступных ресурсов.
  • в некоторых случаях ранее созданный большой двоичный объект должен открыть снова как поток для вставки других файлов

Текущая проблема Кажется, CloudAppendBlob не поддерживает запись потока с возможностью поиска.

Пример кода:

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse("connection string");
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference("container name");

        var appendBlockBlob = container.GetAppendBlobReference("blob to write to");

        using (CloudBlobStream blobStream = await appendBlockBlob.OpenWriteAsync(false))
        // **here an exception will be thrown because the AppendBlockBlob doensn't support seek that is needed by ZipArchive in update mode**
        using (ZipArchive archive = new ZipArchive(blobStream, ZipArchiveMode.Update, true))
        {
            ZipArchiveEntry entry = archive.CreateEntry("file entry", CompressionLevel.Optimal);
            using (Stream stream = entry.Open())
            using (var file = File.OpenRead("file to be written to blob"))
            {
                await file.CopyToAsync(stream);
            }
        }

Зачем мне это нужно:

, потому что мой код работает в azure функции, которая может быть прервана по любой причине, например, по тайм-ауту. поэтому ранее выполненное не будет потеряно и при следующем запуске будет продолжаться, а не начинаться с Beginning

...