mongodb - Store file in Mongo's GridFS with ExpressJS after upload -


i have started building rest api using expressjs. new node please bear me. want able let users upload file directly mongo's gridfs using post /upload route.

from understand in expressjs documentation req.files.image object available in route after uploading, includes path , filename attribute. how can read image data , store gridfs?

i have looked gridfs-stream can't tie ends together. first need read file , use data writestream pipe? or can use file object express , use attributes construct writestream? pointers appreciated!

here's simple demo:

var express = require('express'); var fs      = require('fs'); var mongo   = require('mongodb'); var grid    = require('gridfs-stream'); var db      = new mongo.db('test', new mongo.server("127.0.0.1", 27017), { safe : false });  db.open(function (err) {   if (err) {     throw err;   }   var gfs = grid(db, mongo);   var app = express();    app.use(express.bodyparser());   app.post('/upload', function(req, res) {     var tempfile    = req.files.filename.path;     var origname    = req.files.filename.name;     var writestream = gfs.createwritestream({ filename: origname });     // open stream temporary file created express...     fs.createreadstream(tempfile)       .on('end', function() {         res.send('ok');       })       .on('error', function() {         res.send('err');       })       // , pipe gfs       .pipe(writestream);   });    app.get('/download', function(req, res) {     // todo: set proper mime type + filename, handle errors, etc...     gfs       // create read stream gfs...       .createreadstream({ filename: req.param('filename') })       // , pipe express' response       .pipe(res);   });    app.listen(3012); }); 

i use httpie upload file:

http --form post localhost:3012/upload filename@~/desktop/test.png 

you can check database if file uploaded:

$ mongofiles list -d test connected to: 127.0.0.1 test.png    5520 

you can download again:

http --download localhost:3012/download?filename=test.png 

Comments

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -