mirror of
https://github.com/bubblecup-12/VogelSocialMedia.git
synced 2025-07-18 22:49:51 +00:00
54 lines
1.7 KiB
TypeScript
54 lines
1.7 KiB
TypeScript
import { StatusCodes } from "http-status-codes";
|
|
import multer from "multer";
|
|
import { Request, Response, NextFunction } from "express";
|
|
|
|
// Configure multer to store files in memory
|
|
const multerInstance = multer({
|
|
storage: multer.memoryStorage(),
|
|
limits: { fileSize: 30 * 1024 * 1024 }, // Limit file size to 30 MB
|
|
});
|
|
|
|
export const upload = (req: Request, res: Response, next: NextFunction) => {
|
|
multerInstance.array("images")(req, res, (err: any) => {
|
|
if (err) {
|
|
console.error(err);
|
|
return res
|
|
.status(StatusCodes.BAD_REQUEST)
|
|
.json({ error: err.name, details: [err.message] });
|
|
}
|
|
|
|
if (!req.files || !(req.files as Express.Multer.File[]).length) {
|
|
//check if user uploaded files
|
|
return res.status(StatusCodes.BAD_REQUEST).json({
|
|
error: "No files uploaded",
|
|
details: [{ message: "Please upload at least one file" }],
|
|
});
|
|
}
|
|
|
|
const files = req.files as Express.Multer.File[];
|
|
if (files.length > 15) {
|
|
//check if user uploaded more than 15 files
|
|
return res.status(StatusCodes.BAD_REQUEST).json({
|
|
error: "Too many files",
|
|
details: [{ message: "You can upload a maximum of 15 files" }],
|
|
});
|
|
}
|
|
for (const file of files) {
|
|
//check for correct filetypes
|
|
if (["jpeg", "png", "webp"].includes(file.mimetype)) {
|
|
return res.status(StatusCodes.BAD_REQUEST).json({
|
|
error: "Invalid file type",
|
|
details: [
|
|
{
|
|
message:
|
|
"Only .jpeg, .png, or .webp files are allowed. Invalid: " +
|
|
file.originalname,
|
|
},
|
|
],
|
|
});
|
|
}
|
|
}
|
|
|
|
next();
|
|
});
|
|
};
|