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.'));
|
||||
}
|
||||
|
||||
// Crea el directorio si no existe
|
||||
// Create directory if it doesn't exist
|
||||
if (!fs.existsSync(targetPath)) {
|
||||
fs.mkdirSync(targetPath, { recursive: true });
|
||||
}
|
||||
|
|
@ -46,33 +46,16 @@ const fileFilter = (req, file, cb) => {
|
|||
if (extname && mimetype) {
|
||||
cb(null, true);
|
||||
} else {
|
||||
cb(new multer.MulterError('LIMIT_UNEXPECTED_FILE', file.fieldname));
|
||||
cb(new Error(`File type not allowed: ${file.originalname}`));
|
||||
}
|
||||
};
|
||||
|
||||
const multerUpload = multer({
|
||||
storage,
|
||||
fileFilter,
|
||||
limits: { fileSize: 1024 * 1024 * 1024 } // 1GB
|
||||
});
|
||||
const uploadMiddleware = (fieldName, multiple = false) => {
|
||||
const uploader = multiple
|
||||
? multer({ storage, fileFilter, limits: { fileSize: 1024 * 1024 * 10 } }).array(fieldName) // 10MB limit
|
||||
: multer({ storage, fileFilter, limits: { fileSize: 1024 * 1024 * 10 } }).single(fieldName);
|
||||
|
||||
const uploadMiddleware = (fieldName, multiple = false) => (req, res, next) => {
|
||||
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);
|
||||
});
|
||||
return uploader;
|
||||
};
|
||||
|
||||
export {
|
||||
|
|
|
|||
|
|
@ -1,31 +1,64 @@
|
|||
import { linkRoutes2 } from '../index.js';
|
||||
import { Router } from 'express'
|
||||
import { Router } from 'express';
|
||||
import { uploadMiddleware } from '../middlewares/upload.js';
|
||||
|
||||
export default (config) => {
|
||||
/**
|
||||
* Express router to mount user related functions on.
|
||||
* @type {Object}
|
||||
* @const
|
||||
* @namespace placeRouter
|
||||
*/
|
||||
const router = Router()
|
||||
const hasAddLinks = config.environment !== 'production'
|
||||
const router = Router();
|
||||
|
||||
// Single file upload route
|
||||
router.post(
|
||||
'/upload',
|
||||
uploadMiddleware('file'),
|
||||
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes2),
|
||||
(result, req, res, _) => sendOkResponse(result, req, res));
|
||||
router.post('/upload', (req, res) => {
|
||||
uploadMiddleware('file')(req, res, (err) => {
|
||||
if (err) {
|
||||
return res.status(400).json({ error: err.message });
|
||||
}
|
||||
|
||||
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
|
||||
router.post(
|
||||
'/upload-multiple',
|
||||
uploadMiddleware('file', true),
|
||||
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes2),
|
||||
(result, req, res, _) => sendOkResponse(result, req, res)
|
||||
)
|
||||
|
||||
return router
|
||||
router.post('/upload-multiple', (req, res) => {
|
||||
uploadMiddleware('file', true)(req, res, (err) => {
|
||||
if (err) {
|
||||
return res.status(400).json({ error: err.message });
|
||||
}
|
||||
|
||||
if (!req.files || req.files.length === 0) {
|
||||
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