Пример #1
0
 /// <summary>
 /// Process & Write a StreamReader to an output stream
 /// </summary>
 /// <param name="reader"></param>
 /// <param name="context"></param>
 /// <param name="encodingMgr"></param>
 private static void ProcessAndWriteToStream(StreamReader reader, HttpContext context, EncodingManager encodingMgr)
 {
     string content = SR.GetString(SR.CREDIT_STRING);
     if (Settings.Instance.MinifyContent)
     {
         if (context.Response.ContentType.Contains("javascript"))
         {
             JavaScriptMinifier _Minifier = new JavaScriptMinifier();
             content += _Minifier.Minify(reader);
         }
         else if (context.Response.ContentType.Contains("css"))
         {
             CssMinifier _Minifier = new CssMinifier();
             content += _Minifier.Minify(reader);
         }
         else
         {
             content += reader.ReadToEnd();
         }
     }
     else
     {
         content += reader.ReadToEnd();
     }
     if (encodingMgr.IsEncodingEnabled && Settings.Instance.CompressWebResource)
     {
         encodingMgr.SetResponseEncodingType();
         byte[] compressed = encodingMgr.CompressString(content);
         context.Response.OutputStream.Write(compressed, 0, compressed.Length);
     }
     else
     {
         context.Response.Write(content);
     }
 }
Пример #2
0
        /// <summary>
        ///  Excute the request and response the needes content
        /// <para>Save the response in the file system for next requests</para>
        /// </summary>
        /// <param name="context"></param>
        /// <param name="filesInfo"></param>
        /// <param name="minify"></param>
        /// <param name="versionHash"></param>
        /// <param name="encodingMgr"></param>
        public void Excute(HttpContext context, string[] filesInfo, Minifier minify, int versionHash, EncodingManager encodingMgr)
        {
            string phisicalRoot = context.Server.MapPath("~/") + cReferencesCache;

            string fullPath;
            if (encodingMgr.IsEncodingEnabled)
            {
                fullPath = phisicalRoot + "comp_" + encodingMgr.PreferredEncoding + "_" + versionHash + (minify.Target is JavaScriptCompressionHandler ? ".js" : ".css");
                encodingMgr.SetResponseEncodingType();
            }
            else
            {
                fullPath = phisicalRoot + versionHash + (minify.Target is JavaScriptCompressionHandler ? ".js" : ".css");
            }

            SetResponseCacheSettings(context, null);

            if (!File.Exists(fullPath))
            {
                lock (_syncObject)
                {
                    if (!File.Exists(fullPath))
                    {
                        if (!Directory.Exists(phisicalRoot))
                        {
                            Directory.CreateDirectory(phisicalRoot);
                        }
                        if (encodingMgr.IsEncodingEnabled)
                        {
                            StringBuilder contentSb = new StringBuilder(SR.GetString(SR.CREDIT_STRING));
                            foreach (string fileName in filesInfo)
                            {
                                if (fileName.StartsWith("NOT_FOUND", StringComparison.Ordinal))
                                {
                                    contentSb.AppendFormat(SR.File_FileNotFound + Environment.NewLine, Path.GetFileName(fileName.Split('|')[1]));
                                }
                                else
                                {
                                    using (StreamReader reader = new StreamReader(fileName, context.Response.ContentEncoding))
                                    {
                                        if (Settings.Instance.IsValidPathForMinify(fileName))
                                        {
                                            contentSb.AppendLine(minify(reader));
                                        }
                                        else
                                        {
                                            contentSb.AppendLine(reader.ReadToEnd());
                                        }
                                    }
                                }
                            }

                            using (FileStream fs = new FileStream(fullPath, FileMode.Create))
                            {
                                byte[] compressedContent = encodingMgr.CompressString(contentSb.ToString());
                                fs.Write(compressedContent, 0, compressedContent.Length);
                            }
                            // Release the StringBuilder
                            contentSb.Length = 0;
                        }
                        else
                        {
                            using (FileStream fs = new FileStream(fullPath, FileMode.Create))
                            using (StreamWriter sw = new StreamWriter(fs,context.Response.ContentEncoding))
                            {
                                string content = SR.GetString(SR.CREDIT_STRING);
                                sw.WriteLine(content);
                                foreach (string fileName in filesInfo)
                                {
                                    if (fileName.Length == 0)
                                    {
                                        content = string.Format(CultureInfo.CurrentCulture, SR.File_FileNotFound, Path.GetFileName(fileName));
                                    }
                                    else
                                    {
                                        using (StreamReader reader = new StreamReader(fileName, context.Response.ContentEncoding))
                                        {
                                            if (Settings.Instance.IsValidPathForMinify(fileName))
                                            {
                                                content = minify(reader);
                                            }
                                            else
                                            {
                                                content = reader.ReadToEnd();
                                            }
                                        }
                                    }
                                    sw.WriteLine(content);
                                }
                            }
                        }
                    }
                }
            }
            context.Response.TransmitFile(fullPath);
        }