0

I work with nodejs on a social network project I am on the part of the image upload for the profile photo and to do this I installed the multer module more precisely, version 2.0.0-rc.1.So I set up a file upload.controller.js and n fihier routes.js which are listed below:

//upload.controller.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.uploadProfil = 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}`
    )
  );

  try {
    await UserModel.findByIdAndUpdate(
      req.body.userId,
      { $set : {picture: "./uploads/profil/" + fileName}},
      { new: true, upsert: true, setDefaultsOnInsert: true},
      (err, docs) => {
        if (!err) return res.send(docs);
        else return res.status(500).send({ message: err });
      }
    );
  } catch (err) {
    return res.status(500).send({ message: err });
  }
};

//routes.js
router.post("/upload", upload.single("file"), uploadController.uploadProfil);

but when I make my postman request I get the following result:

result on postman

and subsequently this error in the terminal

node:internal/errors:496
    ErrorCaptureStackTrace(err);
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string or an instance of Buffer or URL. Received null
    at TempWriteStream.WriteStream (node:internal/fs/streams:326:5)
    at new TempWriteStream (C:\Users\Greysun\Desktop\mern-project-master\node_modules\fs-temp\lib\write-stream.js:6:15)
    at Object.createWriteStream (C:\Users\Greysun\Desktop\mern-project-master\node_modules\fs-temp\lib\temp.js:121:10)
    at Busboy.<anonymous> (C:\Users\Greysun\Desktop\mern-project-master\node_modules\multer\lib\read-body.js:70:27)
    at Busboy.emit (node:events:514:28)
    at Busboy.emit (C:\Users\Greysun\Desktop\mern-project-master\node_modules\busboy\lib\main.js:37:33)
    at PartStream.<anonymous> (C:\Users\Greysun\Desktop\mern-project-master\node_modules\busboy\lib\types\multipart.js:214:13)
    at PartStream.emit (node:events:514:28)
    at HeaderParser.<anonymous> (C:\Users\Greysun\Desktop\mern-project-master\node_modules\dicer\lib\Dicer.js:50:16)
    at HeaderParser.emit (node:events:514:28) {
  code: 'ERR_INVALID_ARG_TYPE'
}

Node.js v18.17.1

please I do not fully master the multer module and I request your expertise Thank you very much.

I tried to install multer-s3 but it complicated the task

0 Answers0