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 相关文章推荐
基于jquery.Jcrop的头像编辑器
Mar 01 Javascript
JQuery获取样式中的background-color颜色值的问题
Aug 20 Javascript
提取字符串中年月日的函数代码
Nov 05 Javascript
浅析js设置控件的readonly与enabled属性问题
Dec 25 Javascript
gridview生成时如何去掉style属性中的border-collapse
Sep 30 Javascript
深入理解jquery跨域请求方法
May 18 Javascript
JS Testing Properties 判断属性是否在对象里的方法
Oct 01 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 Javascript
解决vue页面渲染但dom没渲染的操作
Jul 27 Javascript
Vue实现点击导航栏当前标签后变色功能
Aug 19 Javascript
React列表栏及购物车组件使用详解
Jun 28 Javascript
Vue2项目中对百度地图的封装使用详解
Jun 16 Vue.js
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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
PHP之短标签开启设置
2013/06/17 PHP
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
jQuery中Find选择器用法示例
2016/09/21 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
利用aardio给python编写图形界面
2017/08/21 Python
Python实现的字典值比较功能示例
2018/01/08 Python
python保存数据到本地文件的方法
2018/06/23 Python
Python Grid使用和布局详解
2018/06/30 Python
django2笔记之路由path语法的实现
2019/07/17 Python
python标准库OS模块详解
2020/03/10 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
Python装饰器结合递归原理解析
2020/07/02 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
Python页面加载的等待方式总结
2021/02/28 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
CAD制图设计师自荐信
2014/01/29 职场文书
投标诚信承诺书
2014/05/26 职场文书
商务经理岗位职责
2014/07/30 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
个人求职信格式范文
2015/03/20 职场文书
起诉书范文
2015/05/20 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书