Как добавить sharp c помощью multer mongoose.js?

Есть такая загрузка изображений, она работает все хорошо, но когда идет загрузка больших файлов есть проблемы с рендерингом, долго загружает их отображение. Поэтому возник вопрос как можно их компрессировать чтобы они быстрее грузились, знаю что есть sharp, но не могу добавить его в этот код

var multer = require('multer');
 
var storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, 'uploads')
    },
    filename: (req, file, cb) => {
        cb(null, file.fieldname + '-' + Date.now())
    }
});

var upload = multer({ storage: storage });

app.post("/user/img/:id/img", upload.single('img'), controller.userImgUpl);
exports.userImgUpl = async (req, res) => {
  const id = req.params.id;
  const image = new Image({
    img: {
      data: fs.readFileSync(path.join(__dirname, '..', '..', 'uploads', req.file.filename)),
      contentType: 'image/png'
    },
    user: id
  })
  await image.save();
  const related = await User.findById(id);
  related.images.push(image);
  await related.save(function(err) {
  if(err) {console.log(err)}
      res.status(200).send("user Content.");
  })
};

Ответы (1 шт):

Автор решения: Sanset

все я решил сам, если кому интересно:

exports.userImgUpl = async (req, res) => {
  const id = req.params.id;
  const file = fs.readFileSync(path.join(__dirname, '..', '..', 'uploads', req.file.filename))
    await sharp(file)
      .resize({
        width: 1920,
        height: 1080
      })
      .toFile(path.join(__dirname, '..', '..', 'uploadsCompress', req.file.filename))
  try {
    fs.unlinkSync(path.join(__dirname, '..', '..', 'uploads', req.file.filename))
  } catch (error) {
    console.log(error)
  }

  const image = new Image({
    img: {
      data: fs.readFileSync(path.join(__dirname, '..', '..', 'uploadsCompress', req.file.filename)),
      contentType: 'image/png'
    },
    user: id
  })
  try {
    fs.unlinkSync(path.join(__dirname, '..', '..', 'uploadsCompress', req.file.filename))
  } catch (error) {
    console.log(error)
  }
  await image.save();
  const related = await User.findById(id);
  related.images.push(image);
  await related.save(function(err) {
  if(err) {console.log(err)}
      res.status(200).send("user Content.");
  })
};
→ Ссылка