using System.IO.Compression; using System.Text; namespace Models.Helper; public static class CompressionHelper { public static void CompressFile(string sourceFile, string targetFile) { using FileStream originalFileStream = new(sourceFile, FileMode.Open); using FileStream compressedFileStream = File.Create($"{targetFile}.gz"); using GZipStream compressor = new(compressedFileStream, CompressionLevel.SmallestSize); originalFileStream.CopyTo(compressor); } public static void DecompressFile(string sourceFile, string targetFile) { using FileStream compressedFileStream = new(sourceFile, FileMode.Open); using FileStream decompressedFileStream = File.Create($"{targetFile}.gz"); using GZipStream decompressor = new(compressedFileStream, CompressionMode.Decompress); decompressor.CopyTo(decompressedFileStream); } public static string CompressString(string text) { byte[] byteArray = Encoding.UTF8.GetBytes(text); using MemoryStream memoryStream = new(); using (BrotliStream compressionStream = new(memoryStream, CompressionLevel.SmallestSize)) { compressionStream.Write(byteArray, 0, byteArray.Length); } return Convert.ToBase64String(memoryStream.ToArray()); } public static string DecompressString(string compressedText) { byte[] byteArray = Convert.FromBase64String(compressedText); using MemoryStream memoryStream = new(byteArray); using BrotliStream decompressionStream = new(memoryStream, CompressionMode.Decompress); using StreamReader reader = new(decompressionStream); return reader.ReadToEnd(); } }