42 lines
898 B
JavaScript
42 lines
898 B
JavaScript
const multer = require('multer');
|
|
const path = require('path');
|
|
const crypto = require('crypto');
|
|
|
|
const UPLOAD_DIR = process.env.UPLOAD_DIR || './upload';
|
|
|
|
const storage = multer.diskStorage({
|
|
destination: (req, file, cb) => {
|
|
cb(null, UPLOAD_DIR);
|
|
},
|
|
filename: (req, file, cb) => {
|
|
const uniqueId = crypto.randomBytes(8).toString('hex');
|
|
const ext = path.extname(file.originalname);
|
|
cb(null, `${Date.now()}_${uniqueId}${ext}`);
|
|
}
|
|
});
|
|
|
|
const fileFilter = (req, file, cb) => {
|
|
const allowedTypes = [
|
|
'image/jpeg',
|
|
'image/png',
|
|
'image/gif',
|
|
'image/webp',
|
|
'image/svg+xml'
|
|
];
|
|
|
|
if (allowedTypes.includes(file.mimetype)) {
|
|
cb(null, true);
|
|
} else {
|
|
cb(new Error('Tipo file non supportato'), false);
|
|
}
|
|
};
|
|
|
|
const upload = multer({
|
|
storage,
|
|
fileFilter,
|
|
limits: {
|
|
fileSize: 20 * 1024 * 1024 // 20MB max
|
|
}
|
|
});
|
|
|
|
module.exports = upload; |