我想了解如何使用Node.js給gzip一些數據...的Node.js - 產卵gzip的過程
具體來說,我在「BUF」的數據,我想要寫的這一個壓縮的形式「流'。
這裏是我的代碼:
c1.on('data',function(buf){
var gzip = spawn('gzip', ['-' + (compressionRate-0),'-c', '-']);
gzip.stdin.write(buf);
gzip.stdout.on('data',function(data){
console.log(data);
stream.write(data,'binary');
});
});
麻煩的是,它根本行不通!我不確定產卵過程和管道數據的確切語法。
任何幫助非常感謝。
很多感謝,
編輯:這裏是我得到的想法從原來的工作代碼。該項目是在:https://github.com/indutny/node.gzip
任何人都可以搞清楚如何做到這一點在node.js產卵因爲我完全卡住!
var spawn = require('child_process').spawn,
Buffer = require('buffer').Buffer;
module.exports = function (data) {
var rate = 8,
enc = 'utf8',
isBuffer = Buffer.isBuffer(data),
args = Array.prototype.slice.call(arguments, 1),
callback;
if (!isBuffer && typeof args[0] === 'string') {
enc = args.shift();
}
if (typeof args[0] === 'number') {
rate = args.shift() - 0;
}
callback = args[0];
var gzip = spawn('gzip', ['-' + (rate - 0), '-c', '-']);
var promise = new
process.EventEmitter,
output = [],
output_len = 0;
// No need to use buffer if no
callback was provided
if (callback) {
gzip.stdout.on('data', function (data) {
output.push(data);
output_len += data.length;
});
gzip.on('exit', function (code) {
var buf = new Buffer(output_len);
for (var a = 0, p = 0; p < output_len; p += output[a++].length) {
output[a].copy(buf, p, 0);
}
callback(code, buf);
});
}
// Promise events
gzip.stdout.on('data', function (data) {
promise.emit('data', data);
});
gzip.on('exit', function (code) {
promise.emit('end');
});
if (isBuffer) {
gzip.stdin.encoding = 'binary';
gzip.stdin.end(data.length ? data : '');
} else {
gzip.stdin.end(data ? data.toString() : '', enc);
}
// Return EventEmitter, so node.gzip can be used for streaming
// (thx @indexzero for that tip)
return promise;
};
您可以嘗試兩件事:設置stdout.on('data'在寫入標準輸入前,萬一出現任何錯誤,並且在錯誤信息中沒有捕獲的情況下偵聽stderr。 – StevenGilligan
是的,這是我現在正在做的事情。感謝您的幫助, – Eamorr