Hi i need to store a file in mongodb using node.js, the file is placed in my desktop i will have to store it in my mongodb database.I came across something called gridfs but am not sure how to proceed further.Any help will be much appreciated
While I don't recommend storing big files in Mongo, though it's possible, smaller files would be better.
Simply read the file's text (if it's a text file), or binary (if it's in a binary format i.e executable). You can use the fs
library to read the file and encode it accordingly.
Then insert the data, stored in a variable, inside the database.
var fs = require('fs');
// Read file with proper encoding...
var data = //...
// Insert into Mongo
mongo.insert({file: data});
When you want to retrieve the file from the database, you'd do the opposite. The process of encoding/decoding is different depending on the type of file.
If your file size exceeds 16Mb, Mongo's maximum document size, you must use gridFS if you wish to store the files in your DB.
There's a very useful run down of the reasons to use gridFS here: http://docs.mongodb.org/manual/faq/developers/#faq-developers-when-to-use-gridfs
In terms of implementation in node (if using the nativ mongo driver):
var mongodb = require('mongodb')
, MongoClient = mongodb.MongoClient
, Grid = mongodb.Grid //use Grid via the native mongodb driver
;
Once you've setup you connection, when it comes to writing the file into gridFs
var grid = new Grid(db, 'fs'); //db being a handle to your database
var buffer = //read the file in to a buffer
//write the buffer out to mongo
grid.put(buffer, {metadata:{category:'text'}, content_type: 'text'}, function(err, fileInfo) {
if(err) {
//handle any errors here
}
});
来源:https://stackoverflow.com/questions/14017826/storing-a-file-in-mongodb-using-node-js