-
-
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(); | |
}); | |
}); | |
}); | |
}); |
Output of the db.as.find().pretty()
gives very very long string. So do you think it is better to store user details in diffrent collection then its avatar?
Is there any dependency of it?
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)`
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."
@kathar1223
Your solution doesn't store image in db only path to that image.
Am I right?