- Caricamento Video
This commit is contained in:
81
src/middleware/uploadMiddleware.js
Normal file
81
src/middleware/uploadMiddleware.js
Normal file
@@ -0,0 +1,81 @@
|
||||
const multer = require('multer');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
|
||||
class UploadMiddleware {
|
||||
constructor(baseUploadPath = 'uploads/videos') {
|
||||
this.baseUploadPath = path.resolve(baseUploadPath);
|
||||
this._ensureDirectory(this.baseUploadPath);
|
||||
}
|
||||
|
||||
_ensureDirectory(dir) {
|
||||
if (!fs.existsSync(dir)) {
|
||||
fs.mkdirSync(dir, { recursive: true });
|
||||
}
|
||||
}
|
||||
|
||||
_createStorage() {
|
||||
return multer.diskStorage({
|
||||
destination: (req, file, cb) => {
|
||||
// ✅ Legge SOLO da req.query (affidabile con multer)
|
||||
const folder = req.query.folder || 'default';
|
||||
|
||||
console.log('📁 Upload folder:', folder); // Debug
|
||||
|
||||
const uploadPath = path.join(this.baseUploadPath, folder);
|
||||
this._ensureDirectory(uploadPath);
|
||||
cb(null, uploadPath);
|
||||
},
|
||||
filename: (req, file, cb) => {
|
||||
const ext = path.extname(file.originalname);
|
||||
const uniqueName = `${uuidv4()}-${Date.now()}${ext}`;
|
||||
cb(null, uniqueName);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
_fileFilter(req, file, cb) {
|
||||
const allowedMimes = [
|
||||
'video/mp4',
|
||||
'video/webm',
|
||||
'video/ogg',
|
||||
'video/quicktime',
|
||||
'video/x-msvideo',
|
||||
'video/x-matroska'
|
||||
];
|
||||
|
||||
if (allowedMimes.includes(file.mimetype)) {
|
||||
cb(null, true);
|
||||
} else {
|
||||
cb(new Error(`Tipo file non supportato: ${file.mimetype}`), false);
|
||||
}
|
||||
}
|
||||
|
||||
getUploader(options = {}) {
|
||||
const config = {
|
||||
storage: this._createStorage(),
|
||||
fileFilter: this._fileFilter.bind(this),
|
||||
limits: {
|
||||
fileSize: options.maxSize || 500 * 1024 * 1024,
|
||||
files: options.maxFiles || 10
|
||||
}
|
||||
};
|
||||
|
||||
return multer(config);
|
||||
}
|
||||
|
||||
single(fieldName = 'video') {
|
||||
return this.getUploader().single(fieldName);
|
||||
}
|
||||
|
||||
multiple(fieldName = 'videos', maxCount = 10) {
|
||||
return this.getUploader({ maxFiles: maxCount }).array(fieldName, maxCount);
|
||||
}
|
||||
|
||||
getBasePath() {
|
||||
return this.baseUploadPath;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = UploadMiddleware;
|
||||
Reference in New Issue
Block a user