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无须激活的方法
Dec 27 Javascript
两个比较有用的Javascript工具函数代码
Feb 17 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
May 03 Javascript
jquery动态添加删除div 具体实现
Jul 20 Javascript
JavaScript中检测变量是否存在遇到的一些问题
Nov 11 Javascript
JS网页图片按比例自适应缩放实现方法
Jan 15 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
May 09 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
Jan 21 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
Aug 17 Javascript
vue数字类型过滤器的示例代码
Sep 07 Javascript
JavaScript中常见内置函数用法示例
May 14 Javascript
jQuery实现雪花飘落效果
Aug 02 jQuery
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 JSON中文乱码的解决方法详解
2013/06/06 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
php compact 通过变量创建数组
2016/11/15 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
vue中监听返回键问题
2019/08/28 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
python正则表达式实例代码
2020/03/03 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
幼儿园中班开学寄语
2014/04/03 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
宿舍管理制度范本
2015/08/07 职场文书
学校远程教育工作总结
2015/08/11 职场文书
超市主管竞聘书
2015/09/15 职场文书
《学会看病》教学反思
2016/02/17 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL