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获取页面input控件中所有text控件并追加样式属性
Feb 25 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
Mar 17 Javascript
jquery $.fn $.fx是什么意思有什么用
Nov 04 Javascript
js 日期比较相关天数代码
Apr 02 Javascript
JavaScript中 ES6 generator数据类型详解
Aug 11 Javascript
JS 全屏和退出全屏详解及实例代码
Nov 07 Javascript
如何从0开始用node写一个自己的命令行程序
Dec 29 Javascript
js继承的这6种方式!(上)
Apr 23 Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
vue组件 keep-alive 和 transition 使用详解
Oct 11 Javascript
vue3 源码解读之 time slicing的使用方法
Oct 31 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
Aug 06 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 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
mac使用python识别图形验证码功能
2020/01/10 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
平面设计岗位职责
2013/12/14 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
实习生矿工检讨书
2014/10/13 职场文书
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL