export class Multer {
static upload = multer({
storage: multerS3({
s3: new aws.S3(),
bucket: process.env.AWS_BUCKET_NAME,
contentType: multerS3.AUTO_CONTENT_TYPE,
serverSideEncryption: 'AES256',
// acl: 'public-read',
key(request: Request, file: Express.Multer.File, done: any) {
const fileName: string = `${Date.now().toString()} - ${file.originalname}`
done(null, fileName)
}
}),
storage: multer.diskStorage({
destination(_: Request, file: Express.Multer.File, done: any) {
let linux: string = `${process.env.IMG_DIR}`
let window: string = process.env.TEMP || ''
if (!file) {
done(new Error('Uploading file failed'), null)
} else {
if (process.platform === 'win32') {
if (fs.existsSync(window)) {
done(null, window)
} else {
done(new Error('No such file directory').message, null)
}
} else {
if (fs.existsSync(linux)) {
done(null, linux)
} else {
done(new Error('No such file directory').message, null)
}
}
}
},
filename(_, file, done: any) {
if (!file) done(new Error('Get file upload failed'), null)
const fileName: string = `${Date.now().toString()} - ${file.originalname}`
done(null, fileName)
}
}),
fileFilter(req: Request, file: Express.Multer.File, done: any) {
if (!mimeTypeSupport(file.mimetype)) throw new TypeError('mimetype not supported')
if (file.size >= 5242880) throw new TypeError('maximum file or image size must be 5 MB or under 5 MB')
const fileName: string = `${Date.now().toString()} - ${file.originalname}`
done(null, fileName)
},
limits: { fileSize: 5242880 }
}).array('upload', 2)
}