MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment utiliser GridFS pour stocker des images en utilisant Node.js et Mongoose

Je n'étais pas satisfait de la réponse la mieux notée ici et j'en propose donc une nouvelle:j'ai fini par utiliser le module de nœud 'gridfs-stream' (excellente documentation là-bas!) Qui peut être installé via npm.Avec lui, et dans combinaison avec la mangouste, cela pourrait ressembler à ceci :

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);
}

Notez que path est le chemin du fichier sur le système local.

En ce qui concerne ma fonction de lecture du fichier, dans mon cas, j'ai juste besoin de diffuser le fichier sur le navigateur (en utilisant express) :

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