2016-11-21 43 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的Blob存储:

byte[] byteObject = ObjectToByteArray(uploadObject); 

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

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

这个伟大的工程,但我不能找到一种方法,从我的存储中下载,解压缩和反序列化这个对象/文件。

回答

0

您可以使用方法DownloadToStream将文件下载到本地。

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

非常感谢您的帮助!但它仍然给我错误:不支持路径格式。当我使用这个路径:“https //:MYSTORAGEACC.blob.core.windows.net/MYCONTAINER/MYFILE”。我究竟做错了什么? – Daan

+0

将文件从Azure Blob Storage下载到本地,然后从本地解压缩并反序列化下载的文件,而不是将方块DebressAndDeserialize传递到路径。 –

相关问题