如何实现文件经Gzip压缩转Base64及逆向还原(无临时文件)
PowerShell无临时文件实现Gzip压缩+Base64编码/解码方案
一、文件→Gzip压缩→Base64编码→输出Base64文件
以下代码直接在内存中完成压缩与编码,无需生成临时Gzip文件:
# 配置文件路径 $inputFilePath = "C:\your\input\file.path" $outputBase64Path = "C:\your\output\base64.file" # 读取原文件字节 $rawBytes = [System.IO.File]::ReadAllBytes($inputFilePath) # 内存中执行Gzip压缩 $compressedStream = New-Object System.IO.MemoryStream $gzipStream = New-Object System.IO.Compression.GzipStream($compressedStream, [System.IO.Compression.CompressionMode]::Compress) $gzipStream.Write($rawBytes, 0, $rawBytes.Length) $gzipStream.Close() # 将压缩字节转为Base64字符串并写入文件 $base64Content = [System.Convert]::ToBase64String($compressedStream.ToArray()) [System.IO.File]::WriteAllText($outputBase64Path, $base64Content)
二、Base64文件→解码→Gzip解压→还原原文件
对应解码解压流程,同样全程在内存处理:
# 配置文件路径 $inputBase64Path = "C:\your\input\base64.file" $outputFilePath = "C:\your\output\restored.file" # 读取Base64内容并解码为压缩字节 $base64Content = [System.IO.File]::ReadAllText($inputBase64Path) $compressedBytes = [System.Convert]::FromBase64String($base64Content) # 内存中执行Gzip解压 $compressedStream = New-Object System.IO.MemoryStream($compressedBytes) $decompressedStream = New-Object System.IO.MemoryStream $gzipStream = New-Object System.IO.Compression.GzipStream($compressedStream, [System.IO.Compression.CompressionMode]::Decompress) $gzipStream.CopyTo($decompressedStream) $gzipStream.Close() # 将解压后的字节写入原文件 [System.IO.File]::WriteAllBytes($outputFilePath, $decompressedStream.ToArray())
问题说明
你之前遇到的体积增大20%、解压失败问题,大概率是错误地将压缩后的字节流转换为字符串(比如用[System.Text.Encoding]::UTF8.GetString())再做Base64编码——这种转换会破坏二进制数据,导致体积膨胀且解压失败。上述方案直接对字节数组进行Base64编解码,全程保持二进制数据完整性,同时用内存流替代临时文件,完全符合需求。
内容的提问来源于stack exchange,提问作者PlayLORD-SysOp
相关产品推荐
相关产品推荐

