Как преобразовать буфер в поток в 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()
)