public string Decompress(string B64)
 {
     try
     {
         using MemoryStream Stream       = new MemoryStream(Convert.FromBase64String(B64));
         using MemoryStream Result       = new MemoryStream();
         using BrotliStream Decompressor = new BrotliStream(Stream, CompressionMode.Decompress);
         Decompressor.CopyTo(Result);
         return(Convert.ToBase64String(Result.ToArray()));
     }
     catch { return(null);; }
 }
        public string Compress(string B64)
        {
            using MemoryStream Stream     = new MemoryStream(Convert.FromBase64String(B64));
            using MemoryStream Result     = new MemoryStream();
            using BrotliStream Compressor = new BrotliStream(Result, CompressionMode.Compress);
            Compressor.SetQuality(8);
            Stream.CopyTo(Compressor);
            Compressor.Flush();
            var Rst = Convert.ToBase64String(Result.ToArray());

            return(Rst);
        }
Example #3
0
        public static void CompressToBrotlin(string Filename)
        {
            var InputPath = Path.GetFileNameWithoutExtension(Filename).Combine(Path.GetDirectoryName(Filename));

            using (Stream Input = File.Open(InputPath, FileMode.Open))
                using (Stream Output = File.Create(Filename))
                    using (BrotliStream Compressor = new BrotliStream(Output, CompressionMode.Compress))
                    {
                        Compressor.SetQuality(11);
                        Input.CopyTo(Compressor);
                        Compressor.Flush();
                    }
        }
Example #4
0
        private void BrotliCompress(string source, string destination)
        {
            using (var input = File.Open(source, FileMode.Open, FileAccess.Read, FileShare.Read))
                using (var output = File.Create(destination))
                    using (var bs = new BrotliSharpLib.BrotliStream(output, CompressionMode.Compress))
                    {
                        // By default, BrotliSharpLib uses a quality value of 1 and window size of 22 if the methods are not called.
                        bs.SetQuality(BrotliCompressionQuality);
                        /** bs.SetWindow(windowSize); **/
                        /** bs.SetCustomDictionary(customDict); **/
                        input.CopyTo(bs);

                        /* IMPORTANT: Only use the destination stream after closing/disposing the BrotliStream
                         * as the BrotliStream must be closed in order to signal that no more blocks are being written
                         * for the final block to be flushed out
                         */
                        bs.Dispose();
                    }
        }
        public static Stream Decompress(Stream dataIn)
        {
#if UseBrotliLib
            MemoryStream decompressed = new MemoryStream();
            using (var decompressor = new BrotliSharpLib.BrotliStream(dataIn, System.IO.Compression.CompressionMode.Decompress))
                decompressor.CopyTo(decompressed);
            return(decompressed);
#elif NET48
            throw new NotSupportedException("The Brotli decompression is not supported in .Net 4.8");
#elif NETSTANDARD2_0
            throw new NotSupportedException("The Brotli decompression is not supported in .Net 4.8");
#else
            using (var decoder = new System.IO.Compression.BrotliStream(dataIn, System.IO.Compression.CompressionMode.Decompress))
            {
                var dataOut = new MemoryStream();
                decoder.CopyTo(dataOut);
                decoder.Flush();
                return(dataOut);
            }
#endif
        }
Example #6
0
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            if (context.Result is ViewResult viewResult)
            {
                string htmlToCache = viewResult.ToHtml(HttpContext);
                bool   isMobile    = HttpContext.IsMobileBrowser();
                int    statusCode  = HttpContext.Response.StatusCode;
                if (statusCode == StatusCodes.Status200OK)
                {
                    // do not cache dynamically calculated data - as real exam with random questions
                    if (!HttpContext.Request.Path.ToString().Contains("test", StringComparison.InvariantCultureIgnoreCase))
                    {
                        cache.Set <string>(HttpContext.Request.Path.ToString() + "_IsMobile_" + isMobile.ToString(), htmlToCache);

                        // convert string to stream
                        byte[] byteArray = Encoding.ASCII.GetBytes(htmlToCache);

                        using (MemoryStream fs = new MemoryStream(byteArray))
                            using (var ms = new MemoryStream())
                            {
                                using (var bs = new BrotliSharpLib.BrotliStream(ms, System.IO.Compression.CompressionMode.Compress))
                                {
                                    bs.SetQuality(11);
                                    fs.Position = 0;
                                    fs.CopyTo(bs);

                                    bs.Dispose();
                                    byte[] compressed = ms.ToArray();

                                    cache.Set <byte[]>(HttpContext.Request.Path.ToString() + "_IsMobile_" + isMobile.ToString() + "compressedBr", compressed);
                                }
                            }
                    }
                }
            }
            base.OnActionExecuted(context);
        }