Technologies:
Tolerim
2 minutes ago
How can I enable image upload through a Node.js API?
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './uploads');
},
filename: function (req, file, callback) {
const sizeOf = require('image-size');
const originalname = file.originalname;
const fileExt = originalname.split(".").pop();
const excatName = originalname.split(".").slice(0, -1).join(".");
console.log("mimetype is " + file.mimetype); // GETTING FILE EXTENSION NAME
callback(null, excatName + "-" + Date.now().toString() + "." + fileExt);
},
});
var multerFilter = function (req, file, cb) {
const memeT = file.mimetype.split('/')[1];
const restrictToMemeType = ['jpeg','jpg','png','gif'];
if (restrictToMemeType.includes(memeT)) {
cb(null, true);
} else {
cb(new Error('Sorry, the uploaded file type is invalid.'), false);
}
};
var upload = multer({ storage: storage, fileFilter: multerFilter }).single('userPhoto');
const uploadAvatar = function (req, res) {
upload(req, res, function(err) {
if(err) {
return res.end("Error uploading file: " + err);
}
res.end("File is uploaded: " + req.file.filename);
});
};
Answers(1)
Tolerim
2 minutes ago
Verified Answer
To validate the image size before uploading, you can use the image-size package to get the dimensions of the image and check if they meet your criteria. Here's an updated code snippet with added image size validation:
var multer = require('multer');
var sizeOf = require('image-size');
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './uploads');
},
filename: function (req, file, callback) {
const originalname = file.originalname;
const fileExt = originalname.split(".").pop();
const excatName = originalname.split(".").slice(0, -1).join(".");
console.log("mimetype is " + file.mimetype); // GETTING FILE EXTENSION NAME
callback(null, excatName + "-" + Date.now().toString() + "." + fileExt);
},
});
var multerFilter = (req, file, cb) => {
const memeT = file.mimetype.split('/')[1];
const restrictToMemeType = ['jpeg','jpg','png','gif'];
if (restrictToMemeType.includes(memeT)) {
cb(null, true);
} else {
cb(new Error('sorry invalid meme type'), false);
}
};
var upload = multer({
storage: storage,
fileFilter: multerFilter
}).single('userPhoto');
const uploadavatar = function (req, res) {
upload(req, res, function(err) {
if (err) {
return res.end("Error uploading file." + err);
}
// Check image size
const dimensions = sizeOf(req.file.path);
if (dimensions.width != 300 || dimensions.height != 300) {
return res.end("Invalid image size. Width and height must be 300x300 pixels.");
}
res.end("File is uploaded" + req.file.filename);
});
};
In this updated code, we have added the sizeOf package to get the dimensions of the uploaded image. After that, we check if the dimensions match our criteria (300x300) and return an error message if they do not.