40 lines
1.2 KiB
JavaScript
40 lines
1.2 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');
|
|
|
|
module.exports = {
|
|
uploadProfileImage
|
|
}; |