簡體   English   中英

如何從Azure Blob存儲下載,解壓縮和反序列化對象/文件?

[英]How to Download, Decompress and Deserialize an object/file from Azure Blob Storage?

此代碼將壓縮並序列化對象:

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);
            }

這很好用,但是我找不到從存儲中下載,解壓縮和反序列化此對象/文件的方法。

您可以使用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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM