Menangani file upload di Express menggunakan middleware multer.
Setup multer:
import multer from "multer";
// Simpan di folder uploads/
const upload = multer({
dest: "uploads/",
limits: { fileSize: 5 * 1024 * 1024 }, // Max 5MB
fileFilter: (req, file, cb) => {
const allowed = ["image/jpeg", "image/png", "image/webp"];
if (allowed.includes(file.mimetype)) {
cb(null, true);
} else {
cb(new Error("Format file tidak didukung"));
}
},
});
Upload endpoint:
// Single file
app.post("/avatar", upload.single("photo"), (req, res) => {
if (!req.file) {
return res.status(400).json({ error: "No file uploaded" });
}
res.json({
filename: req.file.filename,
size: req.file.size,
mimetype: req.file.mimetype,
});
});
// Multiple files
app.post("/gallery", upload.array("photos", 10), (req, res) => {
res.json({ count: req.files.length });
});
Tips:
- Selalu validasi tipe file (jangan percaya extension saja)
- Set batas ukuran file
- Simpan di cloud storage (S3, Cloudinary) untuk production
- Generate nama file unik untuk menghindari konflik