Add multer upload config (image-only, size-limited, safe names)
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
import multer from "multer";
|
||||
import path from "path";
|
||||
import crypto from "crypto";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
export const UPLOAD_DIR = path.join(__dirname, "uploads");
|
||||
|
||||
const ALLOWED = new Set(["image/gif", "image/png", "image/webp"]);
|
||||
|
||||
const storage = multer.diskStorage({
|
||||
destination: (_req, _file, cb) => cb(null, UPLOAD_DIR),
|
||||
filename: (_req, file, cb) => {
|
||||
const ext = path.extname(file.originalname).toLowerCase().replace(/[^.a-z0-9]/g, "");
|
||||
const safeExt = [".gif", ".png", ".webp"].includes(ext) ? ext : ".gif";
|
||||
cb(null, crypto.randomUUID() + safeExt);
|
||||
},
|
||||
});
|
||||
|
||||
export const upload = multer({
|
||||
storage,
|
||||
limits: { fileSize: 8 * 1024 * 1024 }, // 8 MB
|
||||
fileFilter: (_req, file, cb) => {
|
||||
if (ALLOWED.has(file.mimetype)) cb(null, true);
|
||||
else cb(new Error("Only GIF, PNG, or WebP images are allowed"));
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user