upload.middleware.ts 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import multer from 'multer'
  2. import fs from 'fs'
  3. import { v4 } from 'uuid'
  4. import moment from 'moment'
  5. import { Request } from 'express'
  6. const memoryUpload = multer()
  7. const { UPLOAD_DIST } = process.env
  8. function getToday(): string {
  9. return moment(new Date()).format('yyyyMMDD')
  10. }
  11. const diskStorage = multer.diskStorage({
  12. destination(req, file, cb) {
  13. const dir = UPLOAD_DIST ?? ''
  14. cb(null, dir)
  15. },
  16. filename(req, file, cb) {
  17. const today = getToday()
  18. const dir = `${UPLOAD_DIST ?? ''}/${today}`
  19. if (!fs.existsSync(dir)) {
  20. fs.mkdirSync(dir)
  21. }
  22. const { originalname } = file
  23. const fix: string[] = originalname.split('.')
  24. const newName = fix.length === 0 ? v4() : `${v4()}.${fix[fix.length - 1]}`
  25. cb(null, `${today}/${newName}`)
  26. },
  27. })
  28. const diskUpload = multer({ storage: diskStorage })
  29. const uploadMiddleware = {
  30. memory: memoryUpload,
  31. disk: diskUpload,
  32. }
  33. export default uploadMiddleware
  34. export interface FileRequest extends Request {
  35. file: Express.Multer.File
  36. }