压缩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压缩的应用的更多相关文章

  1. iOS开发中的压缩以及解压

    事实上,在iOS开发中,压缩与解压,我都是采用第三方框架SSZipArchive实现的 gitHub地址:   https://github.com/ZipArchive/ZipArchive 上面有 ...

  2. tomcat中gzip压缩

    在tomcat中压缩文件,修改server.xml文件中的配置 <Connector port="8080" protocol="HTTP/1.1" co ...

  3. mvc开发中DTO,DO,FROM的区别

    DO:数据库实体类映射到model里的实体类,每个字段都和数据库相对应,一般来说开发的时候不要去添加或者修改里面的实体 DTO:与前台交互的时候(一般来说是查询操作)有一些数据字段是那一张表里面没有囊 ...

  4. 浅谈iOS开发中多语言的字符串排序

    一.前言 在iOS开发中,一个经常的场景是利用tableview展示一组数据,以很多首歌曲为例子.为了便于查找,一般会把这些歌曲按照一定的顺序排列,还会加上索引条以便于快速定位. 由于歌曲名可能有数字 ...

  5. ASP.NET MVC开发中常见异常及解决方案

    ASP.NET MVC4入门到精通系列目录汇总 NHibernate:no persister for 异常 1.配置文件后缀名写错 mapping file 必须是.hbm.xml结尾 2.Web. ...

  6. ASP.NET MVC 开发中遇到的两个小问题

    最近在做一个网站,用asp.net MVC4.0来开发,今天遇到了两个小问题,通过查找相关渠道解决了,在这里把这两个问题写出来,问题非常简单,不喜勿喷,mark之希望可以给遇到相同问题的初学者一点帮助 ...

  7. 2014-07-29 浅谈MVC框架中Razor与ASPX视图引擎

    今天是在吾索实习的第15天.随着准备工作的完善,我们小组将逐步开始手机端BBS的开发,而且我们将计划使用MVC框架进行该系统的开发.虽然我们对MVC框架并不是非常熟悉,或许这会降低我们开发该系统的效率 ...

  8. 浅谈Web开发中的定时任务

    曾经做过Windows server下的定时任务的业务,最近又做了一些Linux下使用Crontab做的定时任务的业务,觉得有必要进行一次小结,于是有了如下这篇文章. Windows Server下 ...

  9. MVC开发中的常见错误-02-在应用程序配置文件中找不到名为“OAEntities”的连接字符串。

    在应用程序配置文件中找不到名为“OAEntities”的连接字符串. 分析原因:由于Model类是数据库实体模型,通过从数据库中引用的方式添加实体,所以会自动产生一个数据库连接字符串,而程序运行到此, ...

随机推荐

  1. 关于EntityFramework连接Oracle的详细教程

    研发环境需安装的组件 Oracle Developer Tools for Visual Studio 2015 - MSI Installer 来自Oracle官网. 为Visual Studio ...

  2. 虚拟机评估——如何确定一个CPU核上部署的虚拟机数量?

    最近研究虚拟化技术,不可避免遇到一个问题:如何评估物理主机上虚拟主机的容量?下面这篇文章的思路有一定的启发性,转发一下. 如何确定一个CPU核上部署的虚拟机数量? 摘要:本文说明一个CPU核上部署虚拟 ...

  3. 通过修改host文件来允许和禁止主机的访问

    通过修改host文件来允许和禁止主机的访问 修改/etc/hosts.deny,加入"sshd:ALL" 修改/etc/hosts.allow,加入"sshd:192.1 ...

  4. 刷连记录的迟到检测---Table表格增加一列值

    公司OA新增加了 刷脸记录 ,用于查看自己是否迟到,但是没有什么提醒,于是乎自己写了一个脚本 刷连记录 类似于这样的: 运行脚本后,是这个样子的: 擦,我本月已经迟到了 3次了.... 拖拽 刷脸记录 ...

  5. 完美解决 向UILable 文字最后插入N张图片,支持向限制行数的UILable 最后一行插入,多余文字显示...

    效果: ====直接上代码吧=== // // UILabel+StringFrame.h // QYER // // Created by qyer on 15/3/19. // Copyright ...

  6. UVA 1101 To Add or to Multiply

    首先我们观察加操作和乘操作会对区间产生那些影响.加操作只会平移区间,而乘操作既能移动区间还能放大区间.因此我们不难想到,如果m>1的话乘操作是log级别的,一方面是因为区间的大小不能超过s-r, ...

  7. Windows无法安装到GPT分区形式磁盘的解决办法

    现在很多新买的硬盘都是GTP格式,这种格式需要使用UEFI BIOS模式安装系统,我们以前传统的windows系统安装都是“MBR+legacy BIOS”模式安装 Windows无法安装到GPT分区 ...

  8. 手机软件mockup设计工具

    软件界面设计工具 UIDesigner v2.5 详见 http://www.downyi.com/downinfo/26770.html

  9. SQL Server 几种锁的区别

    NOLOCK(不加锁)    此选项被选中时,SQL  Server  在读取或修改数据时不加任何锁.  在这种情况下,用户有可能读取到未完成事务(Uncommited  Transaction)或回 ...

  10. Hadoop-Drill深度剖析

    1.概述 在<Hadoop - 实时查询Drill>一文当中,笔者给大家介绍如何去处理实时查询这样的业务场景,也是简略的提了一下如何去实时查询HDFS,然起相关细节并未说明.今天给大家细说 ...