Node.js 实现文件与服务端 Gzip 压缩解压缩示例

作者:墨池时间:2026-10-23 12:54:21浏览:367

本文介绍 Node.js 中使用 zlib 模块进行 Gzip 压缩与解压的方法。涵盖本地文件压缩解压、服务端基于 accept-encoding 头返回压缩文件,以及字符串同步压缩的实现代码,帮助开发者快速掌握相关功能。

Node.js Gzip 压缩与解压概述

本文通过具体示例,展示如何在 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);

HTTP 服务端压缩策略

服务端 Gzip 压缩处理

实现逻辑非常直观:首先检查请求头中是否包含 accept-encoding 字段,且其值为 gzip。

  • 若未包含或值不匹配,则直接返回原始未压缩文件。
  • 若包含且值为 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 压缩的使用方式与 Gzip 类似,此处不再赘述。如需了解更详细的用法,建议查阅官方文档。

希望上述内容能对从事 Node.js 程序设计的读者提供帮助。

作者最新文章