Как преобразовать буфер в поток в Nodejs

Я столкнулся с проблемой конвертации буфера в поток в Nodejs.Here это код:

var fs = require('fs');
var b = Buffer([80,80,80,80]);
var readStream = fs.createReadStream({path:b});

Код вызывает исключение:

TypeError: path must be a string or Buffer

Однако в документе Nodejs говорится, что Buffer является приемлемым для fs.createReadStream().

fs.createReadStream (путь [, опции])
путь <строка> | <Буфер> | <URL>
опции <строка> | <Object>

Кто-нибудь мог ответить на вопрос? Огромное спасибо!

Ответы

Ответ 1

fs предназначен для выполнения операций с файловой системой.
fs.createReadStream() ожидает путь как первый аргумент, который может быть именем файла, URL-адресом файла или файловым буфером (как это хорошо объяснено здесь). Вы передаете объект {path:b}.

Если вы попытаетесь createReadStream() правильный синтаксис createReadStream(), ошибка станет более понятной:

var fs = require('fs');
var b = Buffer([80,80,80,80]);
var readStream = fs.createReadStream(b);

console.log(readStream);

// ReadStream {
//   ...
//   path: <Buffer 50 50 50 50>,
//   ...
// }
//
// Error: ENOENT: no such file or directory, open 'PPPP'

Ответ 2

NodeJS 8+ ver. конвертировать буфер в поток

const { Readable } = require('stream');

/**
 * @param binary Buffer
 * returns readableInstanceStream Readable
 */
function bufferToStream(binary) {
    const readableInstanceStream = new Readable({
      read() {
        this.push(binary);
        this.push(null);
      }
    });

    return readableInstanceStream;

  }

Ответ 3

Узел 0.10 +

конвертировать буфер в поток

var Readable = require('stream').Readable; 

function bufferToStream(buffer) { 
  var stream = new Readable();
  stream.push(buffer);
  stream.push(null);

  return stream;
}

Ответ 4

Я переписал решение от Alex Dykyi в функциональном стиле:

var Readable = require('stream').Readable;

[file_buffer, null].reduce(
    (stream, data) => stream.push(data) && stream,
    new Readable()
)