可使用zlib
模塊進行壓縮及解壓縮處理,壓縮文件之後能夠減小體積,加快傳輸速度和節約帶寬 代碼html
壓縮和解壓縮對象都是一個可讀可寫流node
方法 | 說明 |
---|---|
zlib.createGzip | 返回Gzip流對象,使用Gzip算法對數據進行壓縮處理 |
zlib.createGunzip | 返回Gzip流對象,使用Gzip算法對壓縮的數據進行解壓縮處理 |
zlib.createDeflate | 返回Deflate流對象,使用Deflate算法對數據進行壓縮處理 |
zlib.createInflate | 返回Deflate流對象,使用Deflate算法對數據進行解壓縮處理 |
var zlib = require('zlib');
var fs = require('fs');
function zip(src) {
var gzip = zlib.createGzip();//建立壓縮流
var inputStream = fs.createReadStream(src);
var outputStream = fs.createWriteStream(src+'.gz');
inputStream.pipe(gzip).pipe(outputStream);
}
zip('source.txt');
function unzip(src){
var gunzip = zlib.createGunzip();
var inputStream = fs.createReadStream(src);
var outputStream = fs.createWriteStream(src.slice(0,-3));
inputStream.pipe(gunzip).pipe(outputStream);
}
unzip('source.txt.gz');
複製代碼
var zlib = require('zlib');
var fs = require('fs');
var http = require('http');
http.createServer(function (request, response) {
var raw = fs.createReadStream('.' + request.url);
var acceptEncoding = request.headers['accept-encoding'];
if (!acceptEncoding) {
acceptEncoding = '';
}
if (acceptEncoding.match(/\bdeflate\b/)) {
response.setHeader('Content-Encoding','deflate');
raw.pipe(zlib.createDeflate()).pipe(response);
} else if (acceptEncoding.match(/\bgzip\b/)) {
response.setHeader('Content-Encoding','gzip');
raw.pipe(zlib.createGzip()).pipe(response);
} else {
raw.pipe(response);
}
}).listen(9090)
複製代碼
var zlib = require('zlib');
var fs = require('fs');
var http = require('http');
var request = http.get({
host: 'localhost',
path: '/index.html',
port: 9090,
headers: {
'accept-encoding': 'gzip,deflate'
}
})
request.on('response', function (response) {
var output = fs.createWriteStream('test.txt');
switch (response.headers['content-encoding']) {
case 'gzip':
response.pipe(zlib.createGunzip()).pipe(output);
break;
case 'deflate':
response.pipe(zlib.createInflate()).pipe(output);
break;
default:
response.pipe(output);
break;
}
});
request.end();
複製代碼
var zlib = require('zlib');
var fs = require('fs');
var out = fs.createWriteStream('input.log');
var input = 'input';
zlib.gzip(input, function (err, buffer) {
if (!err) {
zlib.unzip(buffer, function (err, buffer) {
if (!err) {
console.log(buffer.toString());
out.end(buffer);
}
})
}
})複製代碼