谈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压缩的应用的更多相关文章
- iOS开发中的压缩以及解压
事实上,在iOS开发中,压缩与解压,我都是采用第三方框架SSZipArchive实现的 gitHub地址: https://github.com/ZipArchive/ZipArchive 上面有 ...
- tomcat中gzip压缩
在tomcat中压缩文件,修改server.xml文件中的配置 <Connector port="8080" protocol="HTTP/1.1" co ...
- mvc开发中DTO,DO,FROM的区别
DO:数据库实体类映射到model里的实体类,每个字段都和数据库相对应,一般来说开发的时候不要去添加或者修改里面的实体 DTO:与前台交互的时候(一般来说是查询操作)有一些数据字段是那一张表里面没有囊 ...
- 浅谈iOS开发中多语言的字符串排序
一.前言 在iOS开发中,一个经常的场景是利用tableview展示一组数据,以很多首歌曲为例子.为了便于查找,一般会把这些歌曲按照一定的顺序排列,还会加上索引条以便于快速定位. 由于歌曲名可能有数字 ...
- ASP.NET MVC开发中常见异常及解决方案
ASP.NET MVC4入门到精通系列目录汇总 NHibernate:no persister for 异常 1.配置文件后缀名写错 mapping file 必须是.hbm.xml结尾 2.Web. ...
- ASP.NET MVC 开发中遇到的两个小问题
最近在做一个网站,用asp.net MVC4.0来开发,今天遇到了两个小问题,通过查找相关渠道解决了,在这里把这两个问题写出来,问题非常简单,不喜勿喷,mark之希望可以给遇到相同问题的初学者一点帮助 ...
- 2014-07-29 浅谈MVC框架中Razor与ASPX视图引擎
今天是在吾索实习的第15天.随着准备工作的完善,我们小组将逐步开始手机端BBS的开发,而且我们将计划使用MVC框架进行该系统的开发.虽然我们对MVC框架并不是非常熟悉,或许这会降低我们开发该系统的效率 ...
- 浅谈Web开发中的定时任务
曾经做过Windows server下的定时任务的业务,最近又做了一些Linux下使用Crontab做的定时任务的业务,觉得有必要进行一次小结,于是有了如下这篇文章. Windows Server下 ...
- MVC开发中的常见错误-02-在应用程序配置文件中找不到名为“OAEntities”的连接字符串。
在应用程序配置文件中找不到名为“OAEntities”的连接字符串. 分析原因:由于Model类是数据库实体模型,通过从数据库中引用的方式添加实体,所以会自动产生一个数据库连接字符串,而程序运行到此, ...
随机推荐
- android: 将程序运行到手机上
8.3.1 将程序运行到手机上 不必我多说,首先你需要拥有一部 Android 手机.现在 Android 手机早就不是什么稀罕 物,几乎已经是人手一部了,如果你还没有话,抓紧去购买吧. 想要将程 ...
- [转]office2010一直卡在“正在受保护的视图中打开”
用Office 2010 打开文件遇到“”,如下图: 转自: 解决办法: 还可以使用下面的方法打开上图的受保护视图设置界面: 1. 启动 Word 2010 应用程序,单击[文件]按钮并选择[选项 ...
- select选择框内容左右移动添加删除栏(升级)
先看一下之前的版本(10年前的作品了) 新版增加了拖动事件(双向及本列),双击左右自动移动,修正了算法性能更好: 也更新了如果姓名长度太长显示变形问题
- 工作组环境下管理windows.
此处指的是windows7 1.防火墙设置 开启wmi,remote admin,防火墙远程管理 可以使用命令行 netsh advfirewall export "C:\temp\WFco ...
- 推荐算法——距离算法
本文内容 用户评分表 曼哈顿(Manhattan)距离 欧式(Euclidean)距离 余弦相似度(cos simliarity) 推荐算法以及数据挖掘算法,计算"距离"是必须的~ ...
- 常用jquery插件资料
fullPage.js 全屏滚动https://github.com/alvarotrigo/fullPage.js Lava Lamp 导航条熔岩灯http://lavalamp.magicmedi ...
- Swift编程语言中的方法引用
由于Apple官方的<The Swift Programming Guide>对Swift编程语言中的方法引用介绍得不多,所以这里将更深入.详细地介绍Swift中的方法引用. Swift与 ...
- puma vs passenger vs rainbows! vs unicorn vs thin 适用场景 及 performance
ruby的几个web server,按照开发活跃度.并发方案及要点.适用场景等分析puma vs passenger vs rainbows! vs unicorn vs thin. 1. thin: ...
- 解析Myeclipse项目下的.classpath文件
<classpathentry kind="src" path="src"/> <classpathentry kind="con& ...
- Android Screen Orientation Change (Screen Rotation) Example
原文见: http://techblogon.com/android-screen-orientation-change-rotation-example/#