94 lines
2.8 KiB
JavaScript
94 lines
2.8 KiB
JavaScript
const multer = require('multer');
|
|
const path = require('path');
|
|
const { v4: uuidv4 } = require('uuid');
|
|
|
|
// Configure storage for profile images
|
|
const profileImageStorage = multer.diskStorage({
|
|
destination: function (req, file, cb) {
|
|
cb(null, path.join(__dirname, '../uploads/profiles'));
|
|
},
|
|
filename: function (req, file, cb) {
|
|
// Generate unique filename: uuid + original extension
|
|
const uniqueId = uuidv4();
|
|
const ext = path.extname(file.originalname);
|
|
cb(null, `${uniqueId}${ext}`);
|
|
}
|
|
});
|
|
|
|
// File filter to accept only images
|
|
const imageFileFilter = (req, file, cb) => {
|
|
// Accept images only
|
|
const allowedMimes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp'];
|
|
if (allowedMimes.includes(file.mimetype)) {
|
|
cb(null, true);
|
|
} else {
|
|
cb(new Error('Invalid file type. Only JPEG, PNG, GIF and WebP images are allowed.'), false);
|
|
}
|
|
};
|
|
|
|
// Create multer upload middleware for profile images
|
|
const uploadProfileImage = multer({
|
|
storage: profileImageStorage,
|
|
fileFilter: imageFileFilter,
|
|
limits: {
|
|
fileSize: 5 * 1024 * 1024 // 5MB limit
|
|
}
|
|
}).single('profileImage');
|
|
|
|
// Configure storage for message images
|
|
const messageImageStorage = multer.diskStorage({
|
|
destination: function (req, file, cb) {
|
|
cb(null, path.join(__dirname, '../uploads/messages'));
|
|
},
|
|
filename: function (req, file, cb) {
|
|
// Generate unique filename: uuid + original extension
|
|
const uniqueId = uuidv4();
|
|
const ext = path.extname(file.originalname);
|
|
cb(null, `${uniqueId}${ext}`);
|
|
}
|
|
});
|
|
|
|
// Create multer upload middleware for message images
|
|
const uploadMessageImage = multer({
|
|
storage: messageImageStorage,
|
|
fileFilter: imageFileFilter,
|
|
limits: {
|
|
fileSize: 5 * 1024 * 1024 // 5MB limit
|
|
}
|
|
}).single('image');
|
|
|
|
// Configure storage for forum images
|
|
const forumImageStorage = multer.diskStorage({
|
|
destination: function (req, file, cb) {
|
|
cb(null, path.join(__dirname, '../uploads/forum'));
|
|
},
|
|
filename: function (req, file, cb) {
|
|
const uniqueId = uuidv4();
|
|
const ext = path.extname(file.originalname);
|
|
cb(null, `${uniqueId}${ext}`);
|
|
}
|
|
});
|
|
|
|
// Factory function to create forum image upload middleware
|
|
const createForumImageUpload = (maxFiles) => {
|
|
return multer({
|
|
storage: forumImageStorage,
|
|
fileFilter: imageFileFilter,
|
|
limits: {
|
|
fileSize: 5 * 1024 * 1024 // 5MB limit per file
|
|
}
|
|
}).array('images', maxFiles);
|
|
};
|
|
|
|
// Create multer upload middleware for forum post images (up to 5 images)
|
|
const uploadForumPostImages = createForumImageUpload(5);
|
|
|
|
// Create multer upload middleware for forum comment images (up to 3 images)
|
|
const uploadForumCommentImages = createForumImageUpload(3);
|
|
|
|
module.exports = {
|
|
uploadProfileImage,
|
|
uploadMessageImage,
|
|
uploadForumPostImages,
|
|
uploadForumCommentImages
|
|
}; |