UNPKG

recharge-utils

Version:

A utility package for recharge-related operations and logic

65 lines (63 loc) 2.15 kB
const multer = require("multer"); const path = require("path"); const fs = require("fs"); /** * Description placeholder * * @param {{ dirPath?: string, fileName?: any, maxSize: 10 * 1024, type:['png','jpg','pdf'] }} param0 * @param {string} [param0.dirPath="/"] * @param {*} [param0.fileName=null] * @param {Number} [Number] * @param {Array} ['png','jpg','pdf'] * @returns {*} */ function uploadFile({ dirPath = "/", fileName = 'file-name', maxSize: fileSize, type: filter }) { const storage = multer.diskStorage({ destination: async function (req, file, cb) { const dir = path.basename("public") + dirPath; if (!fs.existsSync(dir)) { await fs.mkdirSync(dir, { recursive: true }); } cb(null, dir); }, filename: function (req, file, cb) { const uniqueSuffix = fileName + '-' + Date.now(); cb(null, uniqueSuffix + path.extname(file.originalname)); }, }); /** * File filter for uploaded files. * * @param {*} req - The request object. * @param {*} file - The file object. * @param {*} cb - The callback function. * @returns {void} */ const fileFilter = (req, file, cb) => { if (!filter || !Array.isArray(filter) || filter.length === 0) { // Accept all files if filter is not provided or empty return cb(null, true); } const rs = filter.join('|'); const allowedTypes = new RegExp(`^(${rs})$`, 'i'); // allowed extensions const extName = allowedTypes.test( file.originalname.split(".").pop().toLowerCase() ); // check extension if (extName) { return cb(null, true); // allow the file } else { cb(new Error(`Only ${rs} files are allowed`), false); // reject the file } }; const upload = multer({ storage: storage, limits: { fileSize: fileSize * 1024 }, // 10KB limit fileFilter: fileFilter, // Pass the function directly }); return upload; // return { // single: upload.single("file"), // multiple: upload.array("files", 20), // for multiple files, limit to 20 files // }; } module.exports = uploadFile;