s3 image file validation
This commit is contained in:
@@ -1,94 +0,0 @@
|
||||
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
|
||||
};
|
||||
Reference in New Issue
Block a user