recharge-utils
Version:
A utility package for recharge-related operations and logic
65 lines (63 loc) • 2.15 kB
JavaScript
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;