2017-01-15 3 views
-1
  1. ブロブをあるストレージから別のストレージに変換して転送するサービスがあります。ブロブ全体をダウンロードせずに複数のGZipメンバーを検出する

  2. ブロブは、gzipまたは生データのいずれかです。原因.NETフレームワークのgzipクラスの制限のために - 私は、単一のgzip「EDブロブ内の複数の部材を許可していません

  3. 私の目標は、二つ以上のmemebers O(1)で構成さgzip」のEDブロブを拒否することです。

  4. O(1)とは、その全体または大部分を読み取っていないことを意味します。

私はRFC読んで、私は与えられた感持って:

  1. ブロブのサイズ

  2. 最後メンバーのISIZEフッター

私たちはsomethi偽陽性の可能性が非常に低い(すなわち、 blobが単一メンバーまたは複数メンバーのgzipであることを偽陰性(つまり、複数のメンバーを blobにすること)を拒否することによって、

誰もこの問題をうまく処理したことがありますか? ありがとう

答えて

0

zipファイルをローカルディレクトリにダウンロードせずにメモリストリームを使用してzipファイルを取得できます。以下は私のテストサンプルデモです、それは私のために正しく動作します。 SDKでAzure BLOBを操作する方法の詳細は、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)を追加することができます。 –

関連する問題