import formidable, { Fields, Files } from "formidable"; import IncomingForm from "formidable/Formidable"; import path from "path" import fs from "fs" import { Request } from "express" const uploadDir = "uploads" const finalDir = path.join(__dirname, "..", uploadDir) if (!fs.existsSync(finalDir)) { fs.mkdirSync(finalDir) } export const form = formidable({ multiples: true, uploadDir: finalDir, keepExtensions: true, maxFiles: 1, maxFileSize: 200 * 1024 ** 2, filter: part => part.mimetype?.startsWith('image/') || false, filename: (originalName, originalExt, part, form) => { let fieldName = part.name; let timestamp = Date.now(); let ext = part.mimetype?.split("/").pop(); return `${fieldName}-${timestamp}.${ext}`; }, }); export function formParse(form: IncomingForm, req: Request) { return new Promise<{ fields: Fields; files: Files }>((resolve, reject) => { form.parse(req, (err, fields, files) => { if (err) { reject(err); } else { resolve({ fields, files }); } }); }); }