This is my storage for multer I want to name files with session username and that is where my problem lays If I const upload outside I cannot access req.session.user.username anymore...
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./uploads/usersprofile/");
},
filename: function (req, file, cb) {
cb(
null,
file.fieldname +
"_" +
`${req.session.user.username}${path.extname(file.originalname)}`
);
},
});
This is my route to which I upload file but it uploads file but gives me "upload is not a function" error I am unsure how to make it work with if (req.session.user && req.session.user.username) {}
and so it doesn't allow not logged in users to upload plus not show "upload is not a function" error
router.post(
"/uploadpicture",
multer({
storage: storage,
fileFilter: (req, file, cb) => {
if (
file.mimetype == "image/png" ||
file.mimetype == "image/jpg" ||
file.mimetype == "image/jpeg"
) {
cb(null, true);
} else {
cb(null, false);
return cb(new Error("Only .png, .jpg and .jpeg format allowed!"));
}
},
limits: { fileSize: maxSize },
}).single("avatar"),
(req, res) => {
if (req.session.user && req.session.user.username) {
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
res.send(err);
} else if (err) {
res.send(err);
}
});
} else {
res.json({ loggedIn: false });
}
}
);
Fixed by creating const upload that leads to "avatar" const upload = myMulter.single("avatar");
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./uploads/usersprofile/");
},
filename: function (req, file, cb) {
cb(
null,
file.fieldname +
"_" +
`${req.session.user.username}${path.extname(file.originalname)}`
);
},
});
const myMulter = multer({
storage: storage,
fileFilter: (req, file, cb) => {
if (
file.mimetype == "image/png" ||
file.mimetype == "image/jpg" ||
file.mimetype == "image/jpeg"
) {
cb(null, true);
} else {
return cb(new Error("Only .png, .jpg and .jpeg format allowed!"));
}
},
limits: { fileSize: maxSize },
});
const upload = myMulter.single("avatar");
router.post("/uploadpicture", (req, res) => {
if (req.session.user && req.session.user.username) {
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
res.send(err);
} else if (err) {
res.send(err);
}
});
} else {
res.json({ loggedIn: false });
}
});