node.js實(shí)現(xiàn)簡(jiǎn)單的壓縮/解壓縮功能示例
本文實(shí)例講述了node.js實(shí)現(xiàn)簡(jiǎn)單的壓縮/解壓縮功能。分享給大家供大家參考,具體如下:
壓縮的例子
非常簡(jiǎn)單的幾行代碼,就完成了本地文件的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);
解壓的例子
同樣非常簡(jiǎn)單,就是個(gè)反向操作。
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);
服務(wù)端gzip壓縮
代碼超級(jí)簡(jiǎn)單。首先判斷 是否包含 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();
// 記得響應(yīng) Content-Encoding,告訴瀏覽器:文件被 gzip 壓縮過(guò)
res.writeHead(200, {
'Content-Encoding': 'gzip'
});
fs.createReadStream(filepath).pipe(gzip).pipe(res);
}else{
fs.createReadStream(filepath).pipe(res);
}
});
server.listen('3000');
服務(wù)端字符串gzip壓縮
代碼跟前面例子大同小異。這里采用了**slib.gzipSync(str)**對(duì)字符串進(jìn)行g(shù)zip壓縮。
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');
寫(xiě)在后面
deflate壓縮的使用也差不多,這里就不贅述。更多詳細(xì)用法可參考官方文檔。
希望本文所述對(duì)大家node.js程序設(shè)計(jì)有所幫助。
相關(guān)文章
node.js實(shí)現(xiàn)websocket的即時(shí)通訊詳解
這篇文章主要介紹了深入淺出講解websocket的即時(shí)通訊,服務(wù)器可以主動(dòng)向客戶端推送信息,客戶端也可以主動(dòng)向服務(wù)器發(fā)送信息,是真正的雙向平等對(duì)話,屬于服務(wù)器推送技術(shù)的一種,需要的朋友可以參考下2023-05-05
Nodejs實(shí)現(xiàn)爬蟲(chóng)抓取數(shù)據(jù)實(shí)例解析
這篇文章主要介紹了Nodejs實(shí)現(xiàn)爬蟲(chóng)抓取數(shù)據(jù)實(shí)例解析,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07
使用nodejs連接mySQL寫(xiě)接口全過(guò)程(增刪改查)
這篇文章主要給大家介紹了關(guān)于使用nodejs連接mySQL寫(xiě)接口(增刪改查)的相關(guān)資料,MySQL是一種常用的關(guān)系型數(shù)據(jù)庫(kù),它與Node.js的結(jié)合可以提供強(qiáng)大的數(shù)據(jù)存儲(chǔ)和檢索功能,需要的朋友可以參考下2023-12-12
詳解基于electron制作一個(gè)node壓縮圖片的桌面應(yīng)用
這篇文章主要介紹了詳解基于electron制作一個(gè)node壓縮圖片的桌面應(yīng)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Node.js如何通過(guò)http調(diào)用外部接口
這篇文章主要介紹了Node.js如何通過(guò)http調(diào)用外部接口問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Node.js利用Express實(shí)現(xiàn)用戶注冊(cè)登陸功能(推薦)
這篇文章主要介紹了Node.js利用Express實(shí)現(xiàn)用戶注冊(cè)登陸功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10

