欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

谈mvc开发中gzip压缩的应用

发布时间:2025/7/14 c/c++ 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 谈mvc开发中gzip压缩的应用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

压缩view的内容,可加过滤器

 

public class GzipFilter : ActionFilterAttribute{public override void OnResultExecuting(ResultExecutingContext filterContext){string acceptEncoding = filterContext.HttpContext.Request.Headers["Accept-Encoding"];if (String.IsNullOrEmpty(acceptEncoding)) return;var response = filterContext.HttpContext.Response;acceptEncoding = acceptEncoding.ToUpperInvariant();if (acceptEncoding.Contains("GZIP")){response.AppendHeader("Content-Encoding", "gzip");response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);}else if (acceptEncoding.Contains("DEFLATE")){response.AppendHeader("Content-Encoding", "deflate");response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);}}}

然后在要压缩的页面控制器上加标签。

 

[GzipFilter]public ActionResult Index()

 

现在基本上所有的浏览器支持gzip, deflate.

这里是编程对css和js文件进行压缩放在本地,然后发送给客户端。

----这种方法在iis7.5的集成模式下有效,在vs中有效,但在iis6里我还没配置好,无效

----关键是请求,只对action有效,像js,css文件的请求,在BeginRequest里检测不到。这种方法运行在iis7里很完美,文件大概会被压缩到原来的1/3到1/4.

此方法主要是给请求的文件加上http头//Response.AppendHeader("Content-Encoding", "gzip"); 这里很难处理。

如果有谁找到iis6里面可以运行的方法麻烦告诉我,或许能一起讨论找到更好的解决方案,非常感谢!

---pukuimin@qq.com

浏览器检测到这个头,就会对文件进行解压缩,就正常运行了。

protected void Application_BeginRequest(object sender, EventArgs e){GzipFiles();}private void GzipFiles(){string acceptEncoding = Request.Headers["Accept-Encoding"];string filepath = Request.FilePath;string mapfilepath = Server.MapPath("~" + filepath);if (acceptEncoding.Contains("gzip")){#region Gzip处理if (filepath.EndsWith(".css"))//css文件处理 {Response.AppendHeader("Content-Type", "text/css");Request.ContentType = "text/css";if (filepath.EndsWith("gzip.css")){FileInfo fi = new FileInfo(mapfilepath);Response.AppendHeader("Content-Encoding", "gzip");int len = mapfilepath.Length - "gzip.css".Length;if (fi.Exists == false) GZip(mapfilepath.Substring(0, len), mapfilepath);}}else if (filepath.EndsWith(".js"))//js文件处理 {Response.AppendHeader("Content-Type", "application/x-javascript");Request.ContentType = "application/x-javascript";if (filepath.EndsWith("gzip.js")){FileInfo fi = new FileInfo(mapfilepath);Response.AppendHeader("Content-Encoding", "gzip");int len = mapfilepath.Length - "gzip.js".Length;if (fi.Exists == false) GZip(mapfilepath.Substring(0, len), mapfilepath);}}#endregion}else if (acceptEncoding.Contains("deflate")){#region deflate处理if (filepath.EndsWith(".css"))//css文件处理 {Response.AppendHeader("Content-Type", "text/css");Request.ContentType = "text/css";if (filepath.EndsWith("deflate.css")){FileInfo fi = new FileInfo(mapfilepath);Response.AppendHeader("Content-Encoding", "gzip");int len = mapfilepath.Length - "deflate.css".Length;if (fi.Exists == false) GZip(mapfilepath.Substring(0, len), mapfilepath);}}else if (filepath.EndsWith(".js"))//js文件处理 {Response.AppendHeader("Content-Type", "application/x-javascript");Request.ContentType = "application/x-javascript";if (filepath.EndsWith("deflate.js")){FileInfo fi = new FileInfo(mapfilepath);Response.AppendHeader("Content-Encoding", "gzip");int len = mapfilepath.Length - "deflate.js".Length;if (fi.Exists == false) GZip(mapfilepath.Substring(0, len), mapfilepath);}}#endregion}}public void GZip(string fileName, string gipFileName){FileStream fr = File.Create(gipFileName);FileStream fc = File.OpenRead(fileName);GZipStream gzs = new GZipStream(fr, CompressionMode.Compress); //压缩文件类byte[] arr = new byte[fc.Length];fc.Read(arr, 0, (int)fc.Length);gzs.Write(arr, 0, (int)fc.Length);gzs.Close();fc.Close();fr.Close();}//解压缩文件方法public void DeZGip(string fileName, string gipFileName){//准备输入输出文件FileStream fc = File.Create(fileName);FileStream fr = File.OpenRead(gipFileName);GZipStream gzs = new GZipStream(fr, CompressionMode.Decompress);byte[] arr = new byte[fr.Length];fr.Read(arr, 0, (int)fr.Length);fc.Write(arr, 0, (int)fr.Length);gzs.Close();fr.Close();fc.Close();}

 

总结

以上是生活随笔为你收集整理的谈mvc开发中gzip压缩的应用的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。