MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como usar o GridFS para armazenar imagens usando Node.js e Mongoose


Não fiquei satisfeito com a resposta mais bem avaliada aqui e por isso estou fornecendo uma nova:acabei usando o módulo de nó 'gridfs-stream' (ótima documentação lá!) que pode ser instalado via npm. combinação com mangusto, poderia ficar assim:
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);
}

Observe que path é o caminho do arquivo no sistema local.

Quanto à minha função de leitura do arquivo, para o meu caso eu só preciso transmitir o arquivo para o navegador (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."));
}