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 相关文章推荐
QQ邮箱的一个文本编辑器代码
Mar 14 Javascript
jquery中实现标签切换效果的代码
Mar 01 Javascript
jquery的相对父元素和相对文档定位示例代码
Aug 02 Javascript
js实现的map方法示例代码
Jan 13 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
May 13 Javascript
JS+CSS实现带小三角指引的滑动门效果
Sep 22 Javascript
简单实现js间歇或无缝滚动效果
Jun 29 Javascript
angular实现商品筛选功能
Feb 01 Javascript
canvas绘制环形进度条
Feb 23 Javascript
利用jquery如何从json中读取数据追加到html中
Dec 01 jQuery
Vue.js最佳实践(五招助你成为vuejs大师)
May 04 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 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
php4的session功能评述(二)
2006/10/09 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
PHP的几个常用加密函数
2016/02/03 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
文本链接逐个出现的js脚本
2007/12/12 Javascript
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
js实现按一下删除键删除整个单词附demo
2014/09/05 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
Python中replace方法实例分析
2014/08/20 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
Python中扩展包的安装方法详解
2017/06/14 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
Python实现疫情地图可视化
2021/02/05 Python
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
汽车维修专业个人求职信范文
2014/01/01 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
财务总监管理职责范文
2014/03/09 职场文书
出国英文推荐信
2014/05/10 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android