admin/modules/multer.js

  1. /* ============================================================================ *\
  2. || ########################################################################## ||
  3. || # Auction Software Marketplace Release: 0.6 Build 0.7 # ||
  4. || # ---------------------------------------------------------------------- # ||
  5. || # License # 35YAHCNR9344X6O666C123AB # ||
  6. || # ---------------------------------------------------------------------- # ||
  7. || # Copyright ©2014–2021 Develop Scripts LLC. All Rights Reserved # ||
  8. || # This file may not be redistributed in whole or significant part. # ||
  9. || # ------------- AUCTION SOFTWARE IS NOT FREE SOFTWARE ------------------ # ||
  10. || # http://www.auctionsoftwaremarketplace.com|support@auctionsoftware.com # ||
  11. || # ---------------------------------------------------------------------- # ||
  12. || ########################################################################## ||
  13. \* ============================================================================ */
  14. /* eslint-disable consistent-return */
  15. /* eslint-disable class-methods-use-this */
  16. const multer = require('multer')
  17. const mime = require('mime')
  18. /**
  19. * @class class to handle product functions
  20. */
  21. class multerModule {
  22. constructor() {
  23. this.folder = ''
  24. this.filter = ''
  25. this.storage = ''
  26. }
  27. /**
  28. * csvFilter
  29. * @param {req} req request data
  30. * @param {string} file file data
  31. * @param {Function} cb call back function
  32. */
  33. csvFilter(req, file, cb) {
  34. // accept csv only
  35. const fileext = mime.getExtension(file.mimetype)
  36. if (fileext === 'csv' || fileext === 'xls' || fileext === 'xlsx') {
  37. cb(null, true)
  38. } else {
  39. req.fileValidationError = 'Forbidden extension'
  40. cb(null, false, req.fileValidationError)
  41. }
  42. }
  43. /**
  44. * imageFilter
  45. * @param {req} req request data
  46. * @param {string} file file data
  47. * @param {Function} cb call back function
  48. */
  49. imageFilter(req, file, cb) {
  50. // accept image only
  51. if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
  52. return cb(new Error('Only image files are allowed!'), false)
  53. }
  54. cb(null, true)
  55. }
  56. noFilter(req, file, cb) {
  57. cb(null, true)
  58. }
  59. /**
  60. * setupfolder
  61. * @param {string} folder folder name
  62. */
  63. setupfolder(folder) {
  64. this.storage = multer.diskStorage({
  65. destination(req, file, cb) {
  66. cb(null, `public/uploads/${folder}/`)
  67. },
  68. filename(req, file, cb) {
  69. const randomtext = `${Date.now()}_${Math.floor(100000 + Math.random() * 900000)}`
  70. cb(null, `${file.fieldname}-${randomtext}.${mime.getExtension(file.mimetype)}`)
  71. },
  72. })
  73. }
  74. /**
  75. * multer Single upload
  76. * @param {string} fieldname folder name
  77. */
  78. multerSingleUpload(fieldname) {
  79. if (fieldname === 'lotupload') {
  80. this.setupfolder('auction')
  81. this.filter = this.imageFilter
  82. } else if (fieldname === 'csvs') {
  83. this.setupfolder('temp')
  84. this.filter = this.csvFilter
  85. }
  86. const upload = multer({
  87. storage: this.storage,
  88. fileFilter: this.filter,
  89. errorHandling: 'manual',
  90. })
  91. return upload.single(fieldname)
  92. }
  93. /**
  94. * multer Multiple Upload
  95. * @param {string} fieldname folder name
  96. * @param {number} total total images count
  97. */
  98. multerMultipleUpload(fieldname, total) {
  99. if (fieldname === 'ig_lotupload' || fieldname === 'ph_upload') {
  100. this.setupfolder('product')
  101. this.filter = this.imageFilter
  102. }
  103. const upload = multer({ storage: this.storage, fileFilter: this.filter })
  104. return upload.array(fieldname, total)
  105. }
  106. }
  107. module.exports = multerModule