/* ============================================================================ *\
|| ########################################################################## ||
|| # Auction Software Marketplace Release: 0.6 Build 0.7 # ||
|| # ---------------------------------------------------------------------- # ||
|| # License # 35YAHCNR9344X6O666C123AB # ||
|| # ---------------------------------------------------------------------- # ||
|| # Copyright ©2014–2021 Develop Scripts LLC. All Rights Reserved # ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ------------- AUCTION SOFTWARE IS NOT FREE SOFTWARE ------------------ # ||
|| # http://www.auctionsoftwaremarketplace.com|support@auctionsoftware.com # ||
|| # ---------------------------------------------------------------------- # ||
|| ########################################################################## ||
\* ============================================================================ */
/* eslint-disable consistent-return */
/* eslint-disable class-methods-use-this */
const multer = require('multer')
const mime = require('mime')
/**
* @class class to handle product functions
*/
class multerModule {
constructor() {
this.folder = ''
this.filter = ''
this.storage = ''
}
/**
* csvFilter
* @param {req} req request data
* @param {string} file file data
* @param {Function} cb call back function
*/
csvFilter(req, file, cb) {
// accept csv only
const fileext = mime.getExtension(file.mimetype)
if (fileext === 'csv' || fileext === 'xls' || fileext === 'xlsx') {
cb(null, true)
} else {
req.fileValidationError = 'Forbidden extension'
cb(null, false, req.fileValidationError)
}
}
/**
* imageFilter
* @param {req} req request data
* @param {string} file file data
* @param {Function} cb call back function
*/
imageFilter(req, file, cb) {
// accept image only
if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
return cb(new Error('Only image files are allowed!'), false)
}
cb(null, true)
}
noFilter(req, file, cb) {
cb(null, true)
}
/**
* setupfolder
* @param {string} folder folder name
*/
setupfolder(folder) {
this.storage = multer.diskStorage({
destination(req, file, cb) {
cb(null, `public/uploads/${folder}/`)
},
filename(req, file, cb) {
const randomtext = `${Date.now()}_${Math.floor(100000 + Math.random() * 900000)}`
cb(null, `${file.fieldname}-${randomtext}.${mime.getExtension(file.mimetype)}`)
},
})
}
/**
* multer Single upload
* @param {string} fieldname folder name
*/
multerSingleUpload(fieldname) {
if (fieldname === 'lotupload') {
this.setupfolder('auction')
this.filter = this.imageFilter
} else if (fieldname === 'csvs') {
this.setupfolder('temp')
this.filter = this.csvFilter
}
const upload = multer({
storage: this.storage,
fileFilter: this.filter,
errorHandling: 'manual',
})
return upload.single(fieldname)
}
/**
* multer Multiple Upload
* @param {string} fieldname folder name
* @param {number} total total images count
*/
multerMultipleUpload(fieldname, total) {
if (fieldname === 'ig_lotupload' || fieldname === 'ph_upload') {
this.setupfolder('product')
this.filter = this.imageFilter
}
const upload = multer({ storage: this.storage, fileFilter: this.filter })
return upload.array(fieldname, total)
}
}
module.exports = multerModule