node.js实现简单的压缩/解压缩功能示例


Posted in Javascript onNovember 05, 2019

本文实例讲述了node.js实现简单的压缩/解压缩功能。分享给大家供大家参考,具体如下:

压缩的例子

非常简单的几行代码,就完成了本地文件的gzip压缩。

var fs = require('fs');
var zlib = require('zlib');
var gzip = zlib.createGzip();
var inFile = fs.createReadStream('./extra/fileForCompress.txt');
var out = fs.createWriteStream('./extra/fileForCompress.txt.gz');
inFile.pipe(gzip).pipe(out);

解压的例子

同样非常简单,就是个反向操作。

var fs = require('fs');
var zlib = require('zlib');
var gunzip = zlib.createGunzip();
var inFile = fs.createReadStream('./extra/fileForCompress.txt.gz');
var outFile = fs.createWriteStream('./extra/fileForCompress1.txt');
inFile.pipe(gunzip).pipe(outFile);

服务端gzip压缩

代码超级简单。首先判断 是否包含 accept-encoding 首部,且值为gzip。

  • 否:返回未压缩的文件。
  • 是:返回gzip压缩后的文件。
var http = require('http');
var zlib = require('zlib');
var fs = require('fs');
var filepath = './extra/fileForGzip.html';
var server = http.createServer(function(req, res){
  var acceptEncoding = req.headers['accept-encoding'];
  var gzip;
  if(acceptEncoding.indexOf('gzip')!=-1){ // 判断是否需要gzip压缩
    gzip = zlib.createGzip();
    // 记得响应 Content-Encoding,告诉浏览器:文件被 gzip 压缩过
    res.writeHead(200, {
      'Content-Encoding': 'gzip'
    });
    fs.createReadStream(filepath).pipe(gzip).pipe(res);
  }else{
    fs.createReadStream(filepath).pipe(res);
  }
});
server.listen('3000');

服务端字符串gzip压缩

代码跟前面例子大同小异。这里采用了**slib.gzipSync(str)**对字符串进行gzip压缩。

var http = require('http');
var zlib = require('zlib');
var responseText = 'hello world';
var server = http.createServer(function(req, res){
  var acceptEncoding = req.headers['accept-encoding'];
  if(acceptEncoding.indexOf('gzip')!=-1){
    res.writeHead(200, {
      'content-encoding': 'gzip'
    });
    res.end( zlib.gzipSync(responseText) );
  }else{
    res.end(responseText);
  }
});
server.listen('3000');

写在后面

deflate压缩的使用也差不多,这里就不赘述。更多详细用法可参考官方文档。

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
getElementById在任意一款浏览器中都可以用吗的疑问回复
May 13 Javascript
JavaScript中:表达式和语句的区别[译]
Sep 17 Javascript
js弹出模式对话框,并接收回传值的方法
Mar 12 Javascript
js父页面中使用子页面的方法
Jan 09 Javascript
jQuery基本选择器之标签名选择器
Sep 03 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
Mar 13 Javascript
浅析java线程中断的办法
Jul 29 Javascript
vue移动端下拉刷新和上拉加载的实现代码
Sep 08 Javascript
JavaScript中import用法总结
Jan 20 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
Aug 06 Javascript
原生js实现五子棋游戏
May 28 Javascript
html5调用摄像头截图功能
Jan 18 Javascript
js实现随机点名程序
Sep 17 #Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 #Javascript
Vue通过WebSocket建立长连接的实现代码
Nov 05 #Javascript
原生js实现随机点名功能
Nov 05 #Javascript
element-ui 文件上传修改文件名的方法示例
Nov 05 #Javascript
vue keep-alive 动态删除组件缓存的例子
Nov 04 #Javascript
javascript如何实现create方法
Nov 04 #Javascript
You might like
PHP初学者头疼问题总结
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
Prototype Class对象学习
2009/07/19 Javascript
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Django中的forms组件实例详解
2018/11/08 Python
Python 函数list&read&seek详解
2019/08/28 Python
运行Python编写的程序方法实例
2020/10/21 Python
英国手机零售商:Metrofone
2019/03/18 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
优秀毕业生求职推荐信范文
2013/11/21 职场文书
纪念建党演讲稿范文
2014/01/13 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
护士实习求职信
2014/06/22 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
java代码实现空间切割
2022/01/18 Java/Android
Sql Server之数据类型详解
2022/02/28 SQL Server