You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.5 KiB
49 lines
1.5 KiB
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) => {
|
|
console.log(req.body.file);
|
|
try {
|
|
|
|
console.log(req.body.file);
|
|
if (
|
|
req.body.file.detectedMimeType != "image/jpg" &&
|
|
req.body.file.detectedMimeType != "image/png" &&
|
|
req.body.file.detectedMimeType != "image/jpeg"
|
|
)
|
|
throw Error("Invalid file format. Only jpg, jpeg, png formats are allowed.");
|
|
|
|
if (req.body.file.size > 500000) throw Error("File size exceeded the maximum limit of 500KB.");
|
|
if(req.body.file.size === 0) throw Error("Empty file");
|
|
} catch (err) {
|
|
|
|
console.log("File upload failed.")
|
|
console.log(err)
|
|
return res.status(400).json({ message: err.message });
|
|
|
|
}
|
|
const fileName = req.body.file.name + ".jpg";
|
|
|
|
await pipeline(
|
|
req.body.file.stream,
|
|
fs.createWriteStream(
|
|
`${__dirname}/../client/public/uploads/profil/${fileName}`
|
|
)
|
|
);
|
|
|
|
try {
|
|
await UserModel.findByIdAndUpdate(
|
|
req.body.file.userId,
|
|
{ $set: { picture: "./uploads/profil/" + fileName } },
|
|
{ new: true, upsert: true, setDefaultsOnInsert: true })
|
|
.then((data) => res.send(data))
|
|
.catch((err) => res.status(500).send({ message: err }));
|
|
|
|
} catch (err) {
|
|
return res.status(500).send({ message: err });
|
|
}
|
|
}; |