Skip to content Skip to sidebar Skip to footer

Using Mongodb, Express, Node.js And Gridfs-stream For Storing Video And Picture Files

I am creating a single page application using JavaScript(JQuery) and need to store large video files which size exceed 16Mb. I found that need to use GridFS supporting large files.

Solution 1:

You can do direct uploading without using mongoose using gridfs-stream as simple as:

var express = require('express'),
    mongo = require('mongodb'),
    Grid = require('gridfs-stream'),
    db = new mongo.Db('node-cheat-db', new mongo.Server("localhost", 27017)),
    gfs = Grid(db, mongo),
    app = express();

db.open(function (err) {
    if (err) returnhandleError(err);
    var gfs = Grid(db, mongo);
    console.log('All set! Start uploading :)');
});

//POST http://localhost:3000/file
app.post('/file', function (req, res) {
    var writeStream = gfs.createWriteStream({
        filename: 'file_name_here'
    });
    writeStream.on('close', function (file) {
        res.send(`File has been uploaded ${file._id}`);
    });
    req.pipe(writeStream);
});

//GET http://localhost:3000/file/[mongo_id_of_file_here]
app.get('/file/:fileId', function (req, res) {
    gfs.createReadStream({
        _id: req.params.fileId// or provide filename: 'file_name_here'
    }).pipe(res);
});

app.listen(process.env.PORT || 3000);

for complete files and running project:

Clone node-cheat direct_upload_gridfs, run node app followed by npm install express mongodb gridfs-stream.

OR

Follow baby steps at Node-Cheat Direct Upload via GridFS README.md

Solution 2:

Very late but I found previous answer outdated. I'm posting this because this might help newbies like me. To run it, please follow previous answers guide. All credit goes to @ZeeshanHassanMemon.

var express = require('express'),
mongoose = require('mongoose'),
Grid = require('gridfs-stream'),
app = express();

Grid.mongo = mongoose.mongo;
 conn = mongoose.createConnection('mongodb://localhost/node-cheat-db');
  conn.once('open', function () {
    var gfs = Grid(conn.db);
    app.set('gridfs', gfs);
    console.log('all set');
  });

//POST http://localhost:3000/file
app.post('/file', function (req, res) {
     var gridfs = app.get('gridfs');
    var writeStream = gridfs.createWriteStream({
        filename: 'file_name_here'
    });
    writeStream.on('close', function (file) {
        res.send(`File has been uploaded ${file._id}`);
    });
    req.pipe(writeStream);
});

//GET http://localhost:3000/file/[mongo_id_of_file_here]
app.get('/file/:fileId', function (req, res) {
    var gridfs = app.get('gridfs');
    gridfs.createReadStream({
        _id: req.params.fileId// or provide filename: 'file_name_here'
    }).pipe(res);
});

app.listen(process.env.PORT || 3000);

Post a Comment for "Using Mongodb, Express, Node.js And Gridfs-stream For Storing Video And Picture Files"