-
-
Save aheckmann/2408370 to your computer and use it in GitHub Desktop.
/** | |
* Module dependencies | |
*/ | |
var express = require('express'); | |
var fs = require('fs'); | |
var mongoose = require('mongoose'); | |
var Schema = mongoose.Schema; | |
// img path | |
var imgPath = '/path/to/some/img.png'; | |
// connect to mongo | |
mongoose.connect('localhost', 'testing_storeImg'); | |
// example schema | |
var schema = new Schema({ | |
img: { data: Buffer, contentType: String } | |
}); | |
// our model | |
var A = mongoose.model('A', schema); | |
mongoose.connection.on('open', function () { | |
console.error('mongo is open'); | |
// empty the collection | |
A.remove(function (err) { | |
if (err) throw err; | |
console.error('removed old docs'); | |
// store an img in binary in mongo | |
var a = new A; | |
a.img.data = fs.readFileSync(imgPath); | |
a.img.contentType = 'image/png'; | |
a.save(function (err, a) { | |
if (err) throw err; | |
console.error('saved img to mongo'); | |
// start a demo server | |
var server = express.createServer(); | |
server.get('/', function (req, res, next) { | |
A.findById(a, function (err, doc) { | |
if (err) return next(err); | |
res.contentType(doc.img.contentType); | |
res.send(doc.img.data); | |
}); | |
}); | |
server.on('close', function () { | |
console.error('dropping db'); | |
mongoose.connection.db.dropDatabase(function () { | |
console.error('closing db connection'); | |
mongoose.connection.close(); | |
}); | |
}); | |
server.listen(3333, function (err) { | |
var address = server.address(); | |
console.error('server listening on http://%s:%d', address.address, address.port); | |
console.error('press CTRL+C to exit'); | |
}); | |
process.on('SIGINT', function () { | |
server.close(); | |
}); | |
}); | |
}); | |
}); |
Seems to me this is one of hardest back-end topics.
So the working example to store image to local directory @TarunKashyap18 provided has few things to be noted:
-
to run the project:
$ node app.js
-
the localhost its listening to is
localhost:8000
instead oflocalhost:3000
noted in the comment (possibly didnt change much from the blog by @kathar1223. -
to test the result: first open
localhost:8000
to upload a random image; then openhttp://localhost:8000/images
to check the_id
of the stored image; to check the image: openhttp://localhost:8000/picture/(the _id you just checked)
A revised sample with detailed README could be found here
Thanks a ton. I was searching a way to store files in mongo db for days.
I can't thank you enough.
thanks for this, it really helped me
Is there a way to find the path of the file and upload the file from the computer system ? I am trying to use the above mentioned code for storing images without using some extra package like Multer/Formidable etc. The code works fine if a static path is being used, but I wanted to check if someone can help me here to find the path dynamically.
@mukulbawa .. I think you could find the path from Client side / browser
Thank you!
Is it possible to send all the images in the folder to the database?
How did we figure out "Adding a default Image path to Mongoose Schema."
works fine in localhost but fileread is not working in server
`events.js:160
throw er; // Unhandled 'error' event
^
Error: ENOENT: no such file or directory, open 'file:///Users/rda/Desktop/Appointment Booking.png'
at Error (native)
at Object.fs.openSync (fs.js:640:18)
at Object.fs.readFileSync (fs.js:508:33)`