/** * Copyright (c) 2026 Niolla * All rights reserved. * * This source code is proprietary and confidential. * Unauthorized copying, modification, distribution, or use * of this file, via any medium, is strictly prohibited. */ // app/middlewares/upload.middleware.js const multer = require("multer"); // Use memory storage (required for S3 upload) const storage = multer.memoryStorage(); // File filter (only images + PDFs) const fileFilter = (req, file, cb) => { const isValid = ["image/jpeg", "image/png", "image/webp", "application/pdf", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"].includes(file.mimetype); if (isValid) { cb(null, true); } else { cb(new Error("Only JPEG, PNG, WebP, PDF, and XLSX files are allowed"), false); } }; // Multer instance const upload = multer({ storage, fileFilter, limits: { fileSize: Number(process.env.S3_MAX_UPLOAD_BYTES || 5 * 1024 * 1024), }, }); // Middleware wrappers // Single file upload const uploadSingle = (fieldName) => upload.single(fieldName); // Multiple files (same field) const uploadMultiple = (fieldName, maxCount = 5) => upload.array(fieldName, maxCount); // Multiple fields (advanced) const uploadFields = (fields) => upload.fields(fields); module.exports = { uploadSingle, uploadMultiple, uploadFields, };