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);
Другие вопросы по тегам