Saltar al contenido

Cómo pasar un Buffer como argumento de fs.createReadStream

Posterior a de una extensa recopilación de datos hemos podido solucionar esta obstáculo que presentan algunos usuarios. Te compartimos la solución y esperamos servirte de gran ayuda.

Solución:

El primer argumento a fs.createReadStream() debe ser la ruta del archivo. Aparentemente, puede pasar la ruta en un objeto Buffer, pero aún debe ser una ruta de sistema operativo aceptable cuando el Buffer se convierte en un string.

Parece que está intentando pasar el contenido del archivo a fs.createReadStream(). Así no es como funciona esa API. Si miras el código de fs.createReadStream() está completamente claro en el código que va a llamar fs.open() y pasar el primer argumento de fs.createReadStream() como la ruta del archivo para fs.open().

Si lo que está tratando de hacer es crear una secuencia legible desde un búfer (sin ningún archivo involucrado), entonces debe hacerlo de una manera diferente. Puede ver cómo hacerlo aquí en esta respuesta: Convertir un búfer en un flujo de lectura en Node.js.

Conceptualmente, simplemente crea un objeto de flujo legible, inserta los datos que ya tiene en él desde su búfer, inserta un null para indicar el final de la transmisión y crear un noop _read() método y listo. Luego puede usar ese flujo legible con cualquier otro código que espere leerlo.

@ jfriend00 ya ha proporcionado una explicación muy clara sobre este tema. Si se pasa un objeto Buffer como argumento a fs.createReadStream(), debe indicar la ruta del archivo, no el contenido del archivo. Como @Littlee preguntó en un comentario, aquí hay un código de ejemplo:

var express = require('express');
var router = express.Router();
var fs = require('fs')

router.get('/test', function(req, res) 
  var buf = Buffer.from('./test.html');
  fs.createReadStream(buf).pipe(res);
);

Tenga en cuenta el búfer buf indica una ruta de archivo ("./test.html"), no el archivo test.htmlcontenido de .

Creación de una secuencia legible desde el búfer.

Puede crear fácilmente una secuencia legible desde un búfer, sin embargo, usar fs.createReadStream() requiere escribirlo primero en una ruta de archivo.

Usando stream.Duplex()

  • No es necesario escribir un archivo local para obtener una transmisión legible
  • Ahorra E/S y acelera las cosas.
  • Funciona en todos los lugares donde se desea fs.createReadStream().
  • Genial para escribir en servicios en la nube donde el almacenamiento local puede no ser factible.

Ejemplo:

const Duplex = require('stream'); // Native Node Module 

function bufferToStream(myBuuffer) 
    let tmp = new Duplex();
    tmp.push(myBuuffer);
    tmp.push(null);
    return tmp;


const myReadableStream = bufferToStream(your_buffer);

// use myReadableStream anywhere you would use a stream 
// created using fs.createReadStream('some_path.ext');
// For really large streams, you may want to pipe the buffer into the Duplex.

Reseñas y puntuaciones

Más adelante puedes encontrar las interpretaciones de otros programadores, tú incluso puedes insertar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *