const multer = require("multer"); const sharp = require("sharp"); // Configure multer for memory storage (we'll process before saving to DB) const upload = multer({ storage: multer.memoryStorage(), limits: { fileSize: 10 * 1024 * 1024, // 10MB max file size }, fileFilter: (req, file, cb) => { // Only accept images if (file.mimetype.startsWith("image/")) { cb(null, true); } else { cb(new Error("Only image files are allowed"), false); } }, }); // Middleware to process and compress images const processImage = async (req, res, next) => { if (!req.file) { return next(); } try { // Compress and resize image to 800x800px, JPEG quality 85 const processedBuffer = await sharp(req.file.buffer) .resize(800, 800, { fit: "inside", withoutEnlargement: true, }) .jpeg({ quality: 85 }) .toBuffer(); // Attach processed image to request req.processedImage = { buffer: processedBuffer, mimeType: "image/jpeg", }; next(); } catch (error) { res.status(400).json({ message: "Error processing image: " + error.message }); } }; module.exports = { upload, processImage };