【问题标题】:How to Download, Decompress and Deserialize an object/file from Azure Blob Storage?如何从 Azure Blob 存储下载、解压缩和反序列化对象/文件?
【发布时间】:2017-04-04 23:24:41
【问题描述】:

此代码将压缩和序列化对象:

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

这很好用,但我找不到从我的存储中下载、解压缩和反序列化此对象/文件的方法。

【问题讨论】:

    标签: c# asp.net-mvc azure-blob-storage


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的遮阳篷!但它仍然给我错误:不支持路径格式。当我使用此路径时:“https//:MYSTORAGEACC.blob.core.windows.net/MYCONTAINER/MYFILE”。我做错了什么?
    • 先将文件从 Azure Blob Storage 下载到本地,然后从本地解压缩并反序列化下载的文件,而不是将 blob url 作为路径传递给 DecompressAndDeserialize 方法。
    猜你喜欢
    • 2021-03-03
    • 2021-08-21
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 2021-12-08
    • 2019-12-19
    相关资源
    最近更新 更多