attempt at fixing bad file upload
This commit is contained in:
parent
94c8b25878
commit
1a67ac9bd8
|
|
@ -21,7 +21,7 @@ const storage = multer.diskStorage({
|
||||||
return cb(new Error('Invalid path.'));
|
return cb(new Error('Invalid path.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Crea el directorio si no existe
|
// Create directory if it doesn't exist
|
||||||
if (!fs.existsSync(targetPath)) {
|
if (!fs.existsSync(targetPath)) {
|
||||||
fs.mkdirSync(targetPath, { recursive: true });
|
fs.mkdirSync(targetPath, { recursive: true });
|
||||||
}
|
}
|
||||||
|
|
@ -46,33 +46,16 @@ const fileFilter = (req, file, cb) => {
|
||||||
if (extname && mimetype) {
|
if (extname && mimetype) {
|
||||||
cb(null, true);
|
cb(null, true);
|
||||||
} else {
|
} else {
|
||||||
cb(new multer.MulterError('LIMIT_UNEXPECTED_FILE', file.fieldname));
|
cb(new Error(`File type not allowed: ${file.originalname}`));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const multerUpload = multer({
|
const uploadMiddleware = (fieldName, multiple = false) => {
|
||||||
storage,
|
const uploader = multiple
|
||||||
fileFilter,
|
? multer({ storage, fileFilter, limits: { fileSize: 1024 * 1024 * 10 } }).array(fieldName) // 10MB limit
|
||||||
limits: { fileSize: 1024 * 1024 * 1024 } // 1GB
|
: multer({ storage, fileFilter, limits: { fileSize: 1024 * 1024 * 10 } }).single(fieldName);
|
||||||
});
|
|
||||||
|
|
||||||
const uploadMiddleware = (fieldName, multiple = false) => (req, res, next) => {
|
return uploader;
|
||||||
const uploader = multiple ? multerUpload.array(fieldName) : multerUpload.single(fieldName);
|
|
||||||
|
|
||||||
uploader(req, res, (err) => {
|
|
||||||
if (err instanceof multer.MulterError) {
|
|
||||||
return res.status(400).json({ error: err.message });
|
|
||||||
} else if (err) {
|
|
||||||
return res.status(500).json({ error: 'Internal server error during file upload.' });
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!multiple && !req.file) {
|
|
||||||
return res.status(400).json({ error: `No file uploaded under field "${fieldName}"` });
|
|
||||||
}
|
|
||||||
const result = req.file
|
|
||||||
|
|
||||||
next(result);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,64 @@
|
||||||
import { linkRoutes2 } from '../index.js';
|
import { Router } from 'express';
|
||||||
import { Router } from 'express'
|
|
||||||
import { uploadMiddleware } from '../middlewares/upload.js';
|
import { uploadMiddleware } from '../middlewares/upload.js';
|
||||||
|
|
||||||
export default (config) => {
|
export default (config) => {
|
||||||
/**
|
const router = Router();
|
||||||
* Express router to mount user related functions on.
|
|
||||||
* @type {Object}
|
|
||||||
* @const
|
|
||||||
* @namespace placeRouter
|
|
||||||
*/
|
|
||||||
const router = Router()
|
|
||||||
const hasAddLinks = config.environment !== 'production'
|
|
||||||
|
|
||||||
// Single file upload route
|
// Single file upload route
|
||||||
router.post(
|
router.post('/upload', (req, res) => {
|
||||||
'/upload',
|
uploadMiddleware('file')(req, res, (err) => {
|
||||||
uploadMiddleware('file'),
|
if (err) {
|
||||||
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes2),
|
return res.status(400).json({ error: err.message });
|
||||||
(result, req, res, _) => sendOkResponse(result, req, res));
|
}
|
||||||
|
|
||||||
|
if (!req.file) {
|
||||||
|
return res.status(400).json({ error: 'No file uploaded' });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Format successful response
|
||||||
|
const fileUrl = `/public/${req.file.filename}`;
|
||||||
|
return res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
file: {
|
||||||
|
filename: req.file.filename,
|
||||||
|
originalname: req.file.originalname,
|
||||||
|
mimetype: req.file.mimetype,
|
||||||
|
size: req.file.size,
|
||||||
|
url: fileUrl
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// Multiple file upload route
|
// Multiple file upload route
|
||||||
router.post(
|
router.post('/upload-multiple', (req, res) => {
|
||||||
'/upload-multiple',
|
uploadMiddleware('file', true)(req, res, (err) => {
|
||||||
uploadMiddleware('file', true),
|
if (err) {
|
||||||
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes2),
|
return res.status(400).json({ error: err.message });
|
||||||
(result, req, res, _) => sendOkResponse(result, req, res)
|
}
|
||||||
)
|
|
||||||
|
if (!req.files || req.files.length === 0) {
|
||||||
return router
|
return res.status(400).json({ error: 'No files uploaded' });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Format successful response for multiple files
|
||||||
|
const filesData = req.files.map(file => {
|
||||||
|
const fileUrl = `/public/${file.filename}`;
|
||||||
|
return {
|
||||||
|
filename: file.filename,
|
||||||
|
originalname: file.originalname,
|
||||||
|
mimetype: file.mimetype,
|
||||||
|
size: file.size,
|
||||||
|
url: fileUrl
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
files: filesData
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return router;
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue