Multiple approaches can be used in NodeJS and mongoose to store images, but I found multer
particularly interesting. You can store images and videos easily using multer
, but keep in mind that the maximum file size in MongoDB is 25 MB per file. To store larger files, you can use the FOLDER instead of your MongoDB database. The following is an example of storing an image:
Note: The image size must be less than 25MB
index.js
const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const multer = require("multer");
const app = express();
const port = 5000;
app.use(bodyParser.urlencoded({ extended: false }));
// IMPORTING SCHEMA
const ImageModel = require("./schema/imageModel");
// CONFIG
const ImageUpload = multer({
limits: {
fileSize: 1000000
},
fileFilter(req, file, cb) {
if (!file.originalname.match(/\.(jpg|png|JPG|PNG|JPEG|jpeg)$/))
return cb(new Error("This is not a correct format of the file"));
cb(undefined, true);
}
});
// ROUTE
app.post("/api/image", ImageUpload.single("image"), (req, res) => {
const Image = req.file.buffer;
const ID = uuidv4();
const ImageData = new ImageModel({ ID, Image });
ImageData.save((err, noerr) => {
if (noerr) {
res.sendStatus(200);
}
});
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
Check out this repository for more information.
Schema or ImageModel
const mongoose = require('mongoose');
const ImageSchema = new mongoose.Schema({
Image:{
type:Buffer,
required:true,
},
ID:{
type:String,
required:true
}
});
const ImageModel = mongoose.model('Image',ImageSchema);
module.exports = ImageModel;