41 lines
989 B
JavaScript
41 lines
989 B
JavaScript
const multer = require('multer');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
|
|
const uploadDir = path.join(__dirname, '../uploads');
|
|
if (!fs.existsSync(uploadDir)) {
|
|
fs.mkdirSync(uploadDir, { recursive: true });
|
|
}
|
|
|
|
const storage = multer.diskStorage({
|
|
destination(req, file, cb) {
|
|
cb(null, uploadDir);
|
|
},
|
|
filename(req, file, cb) {
|
|
cb(null, `${file.fieldname}-${Date.now()}${path.extname(file.originalname)}`);
|
|
}
|
|
});
|
|
|
|
function checkFileType(file, cb) {
|
|
const filetypes = /jpg|jpeg|png|webp|svg|mp4|webm/;
|
|
const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
|
|
const mimetype = filetypes.test(file.mimetype);
|
|
|
|
if (extname && mimetype) {
|
|
return cb(null, true);
|
|
} else {
|
|
cb(new Error('Images and video media only!'));
|
|
}
|
|
}
|
|
|
|
const upload = multer({
|
|
storage,
|
|
limits: { fileSize: 10 * 1024 * 1024 }, // 10MB limit
|
|
fileFilter: function (req, file, cb) {
|
|
checkFileType(file, cb);
|
|
}
|
|
});
|
|
|
|
module.exports = upload;
|
|
|