I'm having this problem while trying to upload phtos and I don't know why. I'm using multer v. 2.0.0 and express. Is my multer version too old ? Or is it a problem with the await pipeline()?
In upload.js :
const UserModel = require("../models/user.model");
const fs = require("fs");
const { promisify } = require("util");
const pipeline = promisify(require("stream").pipeline);
const { uploadErrors } = require("../utils/errors.utils");
module.exports.uploadProfile = async (req, res) => {
try {
if (
req.file.detectedMimeType != "image/jpg" &&
req.file.detectedMimeType != "image/png" &&
req.file.detectedMimeType != "image/jpeg"
)
throw Error("invalid file");
if (req.file.size > 500000) throw Error("max size");
} catch (err) {
const errors = uploadErrors(err);
return res.status(201).json({ errors });
}
const fileName = req.body.name + ".jpg";
await pipeline(
req.file.stream,
fs.createWriteStream(
`${__dirname}/../client/public/uploads/profil/${fileName}`
)
);
};
In user.routes.js :
const router = require("express").Router();
const multer = require("multer");
const upload = multer();
const userController = require("../controllers/user.controller");
const authController = require("../controllers/auth.controller");
const uploadController = require("../controllers/upload.controller");
// auth
router.post("/register", authController.signUp);
router.post("/login", authController.signIn);
router.get("/logout", authController.logout);
//user display block
router.get("/", userController.getAllUsers);
router.get("/:id", userController.userInfo);
router.put("/:id", userController.updateUser);
router.delete("/:id", userController.deleteUser);
router.patch("/follow/:id", userController.follow);
router.patch("/unfollow/:id", userController.unfollow);
// upload
router.post("/upload", upload.single("file"), uploadController.uploadProfile);
module.exports = router;
Can anyone help me ?
I think we are on the same problem. You have to go back to the previous version of multer not on 2.0.0 and add sharp js to replace pipeline
npm i multer@1.4.5-lts.1 sharp
upload.controller.js
const { uploadErrors } = require("../utils/errors.utils.js");
const sharp = require("sharp");
//upload image profil utilisateur
module.exports.uploadProfil = async (req, res) => {
//console.log(req.file);
//renome le fichier avec extension .jpg
const fileName = req.body.name +".jpg";
try {
if (
req.file.mimetype != "image/jpg" &&
req.file.mimetype != "image/png" &&
req.file.mimetype != "image/jpeg"
)
throw Error("invalid file");
if (req.file.size > 500000) throw Error("max size");
} catch (err) {
const errors = uploadErrors(err);
return res.status(201).json({ errors });
}
try {
await sharp(req.file.buffer)
.resize({ width: 150, height: 150 })
.toFile(`${__dirname}/../client/public/uploads/profil/${fileName}`
);
res.status(201).send("Photo de profil chargé avec succés");
} catch (err) {
res.status(400).send(err);
}
}