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 相关文章推荐
漂亮的仿flash菜单,来自蓝色经典
Jun 26 Javascript
javascript 解析后的xml对象的读取方法细解
Jul 25 Javascript
jqPlot 基于jquery的画图插件
Apr 26 Javascript
javascript基于HTML5 canvas制作画箭头组件
Jun 25 Javascript
Uploadify上传文件方法
Mar 16 Javascript
javascript小数精度丢失的完美解决方法
May 31 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
Jul 27 Javascript
那些精彩的JavaScript代码片段
Jan 12 Javascript
JS创建Tag标签的方法详解
Jun 09 Javascript
js实现会跳动的日历效果(完整实例)
Oct 18 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
Apr 04 Javascript
详解react native页面间传递数据的几种方式
Nov 07 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
PHP的面试题集
2006/11/19 PHP
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
Vue的Options用法说明
2020/08/14 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
python 日期排序的实例代码
2019/07/11 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
python tkinter基本属性详解
2019/09/16 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
python能否java成为主流语言吗
2020/06/22 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
四好少年事迹材料
2014/01/12 职场文书
学生安全责任书
2014/04/15 职场文书
防沙治沙典型材料
2014/05/07 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
docker-compose部署Yapi的方法
2022/04/08 Servers