Formidable streams uploads to the file system by default. If you're using GridFS to store files you'll then need to turn around and copy them off of the file system. Using gridform removes this burden.
Example:
var mongo = require('mongodb') var gridform = require('gridform'); // assuming you've already created a db instance and opened it gridform.db = db; gridform.mongo = mongo; // in your http server var app = http.Server(function (req, res) { // create a gridform var form = gridform(); // returns a custom IncomingForm assert(form instanceof formidable.IncomingForm); // optionally store per-file metadata form.on('fileBegin', function (name, file) { file.metadata = 'so meta' }) // parse normally form.parse(req, function (err, fields, files) { // use files and fields as you do today var file = files.upload; file.name // the uploaded file name file.type // file type per [mime](https://github.com/bentomas/node-mime) file.size // uploaded file size (file length in GridFS) named "size" for compatibility file.path // same as file.name. included for compatibility file.lastModified // included for compatibility // files contain additional gridfs info file.root // the root of the files collection used in MongoDB ('fs' here means the full collection in mongo is named 'fs.files') file.id // the ObjectId for this file }); });npm install gridform The module exports a function which takes an options object.
var gridform = require('gridform'); var options = { db: db, mongo: mongo, filename: fn }; var form = gridform(options);Available options:
- db: an open node-mongodb-native db instance
- mongo: the node-mongodb-native driver you are using
- filename: function
The optional filename function is passed the file.name before streaming to MongoDB providing an opportunity to return a customized filename with a prefix etc.
db and mongo are required unless you've specified them on gridform itself.
var gridform = require('gridform'); gridform.db = db; gridform.mongo = mongo; var form = gridform(); // all goodThe gridform function returns an instance of formidable.IncomingForm so you can process uploads without changing any code.
This module utilizes the gridfs-stream module which is exposed as require('gridform').gridfsStream.
Run the tests with make test.