MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come utilizzare GridFS per archiviare immagini utilizzando Node.js e Mongoose

Non ero soddisfatto della risposta con il punteggio più alto qui e quindi ne sto fornendo una nuova:ho finito per usare il modulo del nodo "gridfs-stream" (ottima documentazione lì!) Che può essere installato tramite npm. Con esso e in combinazione con la mangusta, potrebbe assomigliare a questo:

var fs = require('fs');
var mongoose = require("mongoose");
var Grid = require('gridfs-stream');
var GridFS = Grid(mongoose.connection.db, mongoose.mongo);

function putFile(path, name, callback) {
    var writestream = GridFS.createWriteStream({
        filename: name
    });
    writestream.on('close', function (file) {
      callback(null, file);
    });
    fs.createReadStream(path).pipe(writestream);
}

Nota che il percorso è il percorso del file sul sistema locale.

Per quanto riguarda la mia funzione di lettura del file, nel mio caso ho solo bisogno di trasmettere il file al browser (usando express):

try {
    var readstream = GridFS.createReadStream({_id: id});
    readstream.pipe(res);
} catch (err) {
    log.error(err);
    return next(errors.create(404, "File not found."));
}