2017-01-15 15 views
-1
  1. У меня есть служба, которая преобразует и передает капли из одного хранилища в другое.Обнаружение нескольких членов GZip без загрузки всего блоба

  2. Кобылы могут быть либо gzip 'ed, либо необработанные данные.

  3. не допускают различные членов в одном gzip «под ред сгустка - из-за ограничения в gzip классе .NET фреймворки.

  4. Моя цель состоит в том, чтобы отказаться от gzip «ред сгустки, которые состоят из двух или более в ЧЛЕНОВ O(1).

  5. От O(1) Я имею в виду, что не читал весь блок или большую его часть.

Я прочитал RFC и у меня есть ощущение, что данное:

  1. размер блоб в

  2. ISIZE сноска последнего члена

Мы можем работать somethi чтобы обеспечить с очень малой вероятностью ложноположительные (т. отклонение одного-memeber blob) и ложноотрицательный (то есть допускающий множественные членов blobs), что blob является либо однопользовательским, либо многопользовательским gzip.

Неужели кто-нибудь успешно справился с этой проблемой? Спасибо

ответ

0

Мы можем получить zip-файл с использованием потока памяти без загрузки zip-файла в локальный каталог. Ниже приведена моя тестовая демонстрация, она работает правильно для меня. Подробнее о том, как управлять Azure blob с помощью SDK, см. document .Add System.IO.Compression.dll из системных DLL.

CloudStorageAccount storageAccount = CloudStorageAccount.Parse("You connection string"); 

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

CloudBlobContainer container = blobClient.GetContainerReference("testcont"); //your container name 

CloudBlockBlob blockBlob = container.GetBlockBlobReference("test.zip"); //blob name 

using (var memoryStream = new MemoryStream()) 
{ 
     blockBlob.DownloadToStream(memoryStream); 
     using (ZipArchive zip = new ZipArchive(memoryStream)) 
     { 
      var count = zip.Entries.Count; 
     } 
     // Todo list we can use CloudBlockBlob.StartCopy to copy blob to another storage 
} 

enter image description here Более подробная информация о CloudBlockBlob.StartCopy пожалуйста, обратитесь к document.

Сведения о SDK см. В файле packages.config.

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net452" /> 
    <package id="Microsoft.Data.Edm" version="5.7.0" targetFramework="net452" /> 
    <package id="Microsoft.Data.OData" version="5.7.0" targetFramework="net452" /> 
    <package id="Microsoft.Data.Services.Client" version="5.7.0" targetFramework="net452" /> 
    <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" /> 
    <package id="System.Spatial" version="5.7.0" targetFramework="net452" /> 
    <package id="WindowsAzure.Storage" version="8.0.1" targetFramework="net452" /> 
</packages> 
+0

Это решение по-прежнему загружает весь блокнот. Я пытаюсь избежать этого - независимо от места загрузки (локальный каталог или память). Если есть какое-то решение для вышеупомянутой проблемы, то меня больше интересует низкое объяснение того, как это возможно с учетом RFC. – johni

+0

Если файлы gizp не загружаются в лазурные лабиринты, мы можем добавить [metedata] (https://docs.microsoft.com/en-us/azure/storage/storage-properties-metadata) эти капли во время загрузки. –