import { Router } from "express"; import multer from "multer"; import { storagePut } from "../storage"; import { randomBytes } from "crypto"; const router = Router(); // Configuration de multer pour gérer les uploads en mémoire const upload = multer({ storage: multer.memoryStorage(), limits: { fileSize: 5 * 1024 * 1024, // 5MB max }, fileFilter: (req, file, cb) => { // Vérifier que c'est bien une image if (file.mimetype.startsWith("image/")) { cb(null, true); } else { cb(new Error("Le fichier doit être une image")); } }, }); /** * Route d'upload d'images vers S3 * POST /api/upload-image * Body: multipart/form-data avec un champ "file" */ router.post("/", upload.single("file"), async (req, res) => { try { if (!req.file) { return res.status(400).json({ success: false, message: "Aucun fichier fourni", }); } const file = req.file; // Générer un nom de fichier unique const randomSuffix = randomBytes(8).toString("hex"); const extension = file.originalname.split(".").pop() || "jpg"; const fileName = `attestations/${Date.now()}-${randomSuffix}.${extension}`; // Upload vers S3 const result = await storagePut( fileName, file.buffer, file.mimetype ); return res.json({ success: true, url: result.url, s3Key: fileName, message: "Image uploadée avec succès", }); } catch (error) { console.error("[UploadImage] Error:", error); return res.status(500).json({ success: false, message: "Erreur lors de l'upload de l'image", }); } }); export default router;