使用C#解密解压Azure Blob Storage数据时返回空数据问题求解
问题根因
- 核心原因是下载完成后未重置内存流的指针位置:执行
dblob.DownloadToStream(compressedStream, null, doptions, null)后,compressedStream的Position属性会自动指向流的末尾,后续将该流传入GZipStream解压时,程序会从流末尾开始读取数据,无有效内容可解压,最终输出为空。 - 次要排查点:如果下载时使用的解密配置
doptions和上传时的加密配置options参数不匹配,会导致下载得到的是无效乱码数据,也会出现解压后为空的问题。
修复方案
在下载完成后、解压操作前,手动将压缩流的指针重置到起始位置即可,同时可按需校验加密配置一致性、下载流的长度是否符合预期。
修正后的解压代码
var compressedStream = new MemoryStream(); //Download and decrypt Blob data to MemoryStream dblob.DownloadToStream(compressedStream, null, doptions, null); // 新增代码:重置流指针到起始位置 compressedStream.Position = 0; //Decompress Code var bigStream = new GZipStream(compressedStream, CompressionMode.Decompress); var bigStreamOut = new MemoryStream(); bigStream.CopyTo(bigStreamOut); output = Encoding.UTF8.GetString(bigStreamOut.ToArray()); Console.WriteLine(output);
内容的提问来源于stack exchange,提问作者Atul Takekar
相关产品推荐
相关产品推荐

