Je suis en train de gzip des données en utilisant Node.js ...Node.js - spawn processus gzip
Plus précisément, j'ai données 'BUF et je veux écrire une forme gzip de ce à' courant'.
Voici mon code:
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');
});
});
Le problème est, il ne fonctionnera pas! Je ne suis pas sûr de la syntaxe exacte des processus de génération et des données de tuyauterie.
Toute aide grandement appréciée.
Un grand merci à l'avance,
Edit: voici le code de travail d'origine où j'ai eu l'idée de. Le projet est à: https://github.com/indutny/node.gzip
Quelqu'un peut-il travailler sur comment faire ce frai dans node.js parce que je suis totalement coincé!
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;
};
Vous pouvez essayer deux choses: définir le fichier stdout.on ('data' AVANT d'écrire sur le fichier stdin, au cas où quelque chose apparaîtrait et aussi, écouter sur le stderr au cas où un message d'erreur ne s'affiche pas. – StevenGilligan
Oui, c'est quelque chose que je fais en ce moment .. Merci pour votre aide, – Eamorr