NodeJS: потоковая передача нескольких файлов из readstream (gridFS) для показа на веб-интерфейсе
Я загрузил несколько файлов изображений в MongoDB, используя "Multer" и "multer-gridfs-storage". Я хочу извлечь эти файлы и показать их в виде миниатюр на веб-странице. Я попытался извлечь эти файлы в ReadStream и сохранить их в массив, который я могу зациклить.
var streams = [];
console.log(result)
for (var i = 0; i < result.length; i++) {
var gfs = Grid(conn.db);
var campground = gfs.createReadStream({
_id: result[i]._id
});
streams[i] = campground;
console.log(" " + i);
}
Я хочу передать их в интерфейс, где они могут быть отображены, но они не отображаются. Я попытался запустить следующий код в цикле.
var rest
streams[0].pipe(rest)
res.writeHead(200, { 'Content-Type': 'image/jpeg' });
res.write(rest);
// res.addTrailers({ 'image/jpeg': rest });
res.end();
не работает. Следующее работает, но отображает только один файл
streams[i].pipe(res)
Я хочу передать массив изображений в мой файл ejs. Массив streams [i] является объектом сетки, а не конечными изображениями. Как мне это сделать?
С уважением, Гаурав
2 ответа
Получил ответ после некоторого поиска
const bufs = [];
readstream.on('data', function(chunk) {
bufs.push(chunk);
});
readstream.on('end', function() {
const fbuf = Buffer.concat(bufs);
res.setHeader('Content-Type', 'image/jpeg');
res.writeHead(res.statusCode);
res.write(fbuf);
/res.end();
});
Не знаю, если вы все еще ищете, но вот что я использую:
var gfs = Grid(req.conn.db, mongoose.mongo);
var fileId = new mongoose.Types.ObjectId();
var fileName = file.filename;
//Create a gridfs-stream into which we pipe multer's temporary file saved in uploads
var writestream = gfs.createWriteStream({
_id: fileId,
filename: file.originalname,
aliases: fileName
});
//Pipe multer's temp file /uploads/filename into the stream we created above.
fs.createReadStream(imgDir + fileName)
.on("end", function () {
// something
})
.on("err", function () {
var msg = 'Erro enviando imagem para o banco de dados';
req.flash('error_msg', msg);
})
.pipe(writestream);