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 相关文章推荐
js 实现无缝滚动 兼容IE和FF
Jul 15 Javascript
js 字符串转换成数字的三种方法
Mar 23 Javascript
JS操作数据库的实例代码
Oct 17 Javascript
JQuery记住用户名和密码的具体实现
Apr 04 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
javascript实现禁止复制网页内容汇总
Dec 30 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
May 10 Javascript
深入浅析Vue全局组件与局部组件的区别
Jun 15 Javascript
vue实现循环切换动画
Oct 17 Javascript
Bootstrap4 gulp 配置详解
Jan 06 Javascript
javascript实现简易聊天室
Jul 12 Javascript
Vue源码分析之Vue实例初始化详解
Aug 25 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
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
JS实现self的resend
2010/07/22 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
详解JS中的立即执行函数
2017/02/24 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
python smtplib发送带附件邮件小程序
2018/05/22 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
python批量处理txt文件的实例代码
2020/01/13 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
水果花束:Fruit Bouquets
2017/12/20 全球购物
汽车维修专业个人求职信范文
2014/01/01 职场文书
工程资料员岗位职责
2014/03/10 职场文书
学校招生宣传广告词
2014/03/19 职场文书
学校火灾防控方案
2014/06/09 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
工作犯错保证书
2015/05/11 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
2016年教师节慰问信
2015/12/01 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server