2016-11-21 34 views
0

このコードは圧縮し、シリアライズオブジェクトをします:Azure BLOBストレージからオブジェクト/ファイルをダウンロード、解凍、逆シリアル化する方法は?

public static byte[] ObjectToByteArray(object[] obj) 
     { 
      using (MemoryStream msCompressed = new MemoryStream()) 
      using (GZipStream gZipStream = new GZipStream(msCompressed, CompressionMode.Compress)) 
      using (MemoryStream msDecompressed = new MemoryStream()) 
      { 
       new BinaryFormatter().Serialize(msDecompressed, obj); 
       byte[] byteArray = msDecompressed.ToArray(); 

       gZipStream.Write(byteArray, 0, byteArray.Length); 
       gZipStream.Close(); 
       return msCompressed.ToArray(); 
      } 
     } 

し、次は、Azureブロブストレージにアップロードします:

byte[] byteObject = ObjectToByteArray(uploadObject); 

      using (Stream stream = new MemoryStream(byteObject)) 
      { 

       stream.Seek(0, SeekOrigin.Begin); 
       blockBlob.UploadFromStream(stream, null, options); 
      } 

これは素晴らしい作品が、私はへの道を見つけることができませんこのオブジェクト/ファイルを自分のストレージからダウンロード、解凍、逆シリアル化します。

答えて

0

ダウンロード方法をダウンロードすると、ファイルをローカルにダウンロードできます。

using (var fileStream = System.IO.File.OpenWrite(@"xxxx\compressedfile.gz")) 
{ 
    blockBlob.DownloadToStream(fileStream); 
} 

次に、次のコードを参照して、指定されたストリームを解凍および逆シリアル化することができます。

public static void DecompressAndDeserialize(string path) 
{ 
    using (FileStream originalFileStream = new FileStream(path, FileMode.Open, FileAccess.Read)) 
    { 
     FileInfo fileToDecompress = new FileInfo(path); 

     string FileName = fileToDecompress.FullName; 
     string newFileName = FileName.Remove(FileName.Length - fileToDecompress.Extension.Length); 

     using (FileStream decompressedFileStream = File.Create(newFileName)) 
     { 
      using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress)) 
      { 
       decompressionStream.CopyTo(decompressedFileStream); 
      } 
     } 

     FileStream fs = new FileStream(newFileName, FileMode.Open); 

     BinaryFormatter formatter = new BinaryFormatter(); 

     object[] uploadObject = (object[])formatter.Deserialize(fs); 
    } 
} 
+0

awnserさんありがとうございました!しかし、それでも私にはエラーが出る。パスフォーマットはサポートされていない。このパスを使用すると: "https //:MYSTORAGEACC.blob.core.windows.net/MYCONTAINER/MYFILE"。私は間違って何をしていますか? – Daan

+0

ファイルをAzure Blobストレージからローカルにダウンロードしてから、メソッドDecompressAndDeserializeへのパスとしてblob urlを渡すのではなく、ローカルからダウンロードしたファイルを解凍してデシリアライズします。 –

関連する問題