read node example createreadstream node.js gzip zlib gzipstream node.js-stream

node.js - node - zlib js



¿Cómo canalizar un flujo legible en dos flujos grabables a la vez en Node.js? (2)

Descubrí que zlib devuelve un flujo legible que puede canalizarse posteriormente a otros múltiples flujos. Así que hice lo siguiente para resolver el problema anterior:

var sourceFileStream = fs.createReadStream(sourceFile); // Even though we could chain like // sourceFileStream.pipe(zlib.createGzip()).pipe(response); // we need a stream with a gzipped data to pipe to two // other streams. var gzip = sourceFileStream.pipe(zlib.createGzip()); // This will pipe the gzipped data to response object // and automatically close the response object. gzip.pipe(response); // Then I can pipe the gzipped data to a file. gzip.pipe(fs.createWriteStream(targetFilePath));

La meta es:

  1. Crear una secuencia de lectura de archivos.
  2. zlib.createGzip() a gzip ( zlib.createGzip() )
  3. Luego canalice el flujo de lectura de la salida de zlib a:

    1) objeto de response HTTP

    2) y la secuencia de archivos de escritura para guardar la salida comprimida.

Ahora puedo hacer hasta 3.1:

var gzip = zlib.createGzip(), sourceFileStream = fs.createReadStream(sourceFilePath), targetFileStream = fs.createWriteStream(targetFilePath); response.setHeader(''Content-Encoding'', ''gzip''); sourceFileStream.pipe(gzip).pipe(response);

... que funciona bien, pero también necesito guardar los datos comprimidos en gzip en un archivo para que no tenga que volver a apretar cada vez y poder transmitir directamente los datos comprimidos en formato gzip como respuesta.

Entonces, ¿cómo canalizo un flujo legible en dos flujos grabables a la vez en Nodo?

Sería sourceFileStream.pipe(gzip).pipe(response).pipe(targetFileStream); ¿Trabaja en el nodo 0.8.x?


El encadenamiento / división de tuberías no funciona como lo está tratando de hacer aquí, enviando el primero a dos pasos subsiguientes diferentes:

sourceFileStream.pipe(gzip).pipe(response);

Sin embargo, puede canalizar el mismo flujo legible en dos flujos grabables, por ejemplo:

var fs = require(''fs''); var source = fs.createReadStream(''source.txt''); var dest1 = fs.createWriteStream(''dest1.txt''); var dest2 = fs.createWriteStream(''dest2.txt''); source.pipe(dest1); source.pipe(dest2);