压缩与解压缩处理

可以使用zlib模块进行压缩及解压缩处理,压缩文件以后可以减少体积,加快传输速度和节约带宽 代码

压缩对象

压缩和解压缩对象都是一个可读可写流

方法 说明
zlib.createGzip 返回Gzip流对象,使用Gzip算法对数据进行压缩处理
zlib.createGunzip 返回Gzip流对象,使用Gzip算法对压缩的数据进行解压缩处理
zlib.createDeflate 返回Deflate流对象,使用Deflate算法对数据进行压缩处理
zlib.createInflate 返回Deflate流对象,使用Deflate算法对数据进行解压缩处理

压缩和解压缩

  1. var zlib = require('zlib');
  2. var fs = require('fs');
  3. function zip(src) {
  4. var gzip = zlib.createGzip();//创建压缩流
  5. var inputStream = fs.createReadStream(src);
  6. var outputStream = fs.createWriteStream(src+'.gz');
  7. inputStream.pipe(gzip).pipe(outputStream);
  8. }
  9. zip('source.txt');
  10. function unzip(src){
  11. var gunzip = zlib.createGunzip();
  12. var inputStream = fs.createReadStream(src);
  13. var outputStream = fs.createWriteStream(src.slice(0,-3));
  14. inputStream.pipe(gunzip).pipe(outputStream);
  15. }
  16. gnzip('source.txt.gz');

在http中的应用

  1. var zlib = require('zlib');
  2. var fs = require('fs');
  3. var http = require('http');
  4. http.createServer(function (request, response) {
  5. var raw = fs.createReadStream('.' + request.url);
  6. var acceptEncoding = request.headers['accept-encoding'];
  7. if (!acceptEncoding) {
  8. acceptEncoding = '';
  9. }
  10. if (acceptEncoding.match(/\bdeflate\b/)) {
  11. response.setHeader('Content-Encoding','deflate');
  12. raw.pipe(zlib.createDeflate()).pipe(response);
  13. } else if (acceptEncoding.match(/\bgzip\b/)) {
  14. response.setHeader('Content-Encoding','gzip');
  15. raw.pipe(zlib.createGzip()).pipe(response);
  16. } else {
  17. raw.pipe(response);
  18. }
  19. }).listen(9090)
  1. var zlib = require('zlib');
  2. var fs = require('fs');
  3. var http = require('http');
  4. var request = http.get({
  5. host: 'localhost',
  6. path: '/index.html',
  7. port: 9090,
  8. headers: {
  9. 'accept-encoding': 'gzip,deflate'
  10. }
  11. })
  12. request.on('response', function (response) {
  13. var output = fs.createWriteStream('test.txt');
  14. switch (response.headers['content-encoding']) {
  15. case 'gzip':
  16. response.pipe(zlib.createGunzip()).pipe(output);
  17. break;
  18. case 'deflate':
  19. response.pipe(zlib.createInflate()).pipe(output);
  20. break;
  21. default:
  22. response.pipe(output);
  23. break;
  24. }
  25. });
  26. request.end();