45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { extname } from 'path';
|
|
import { v4 as uuidv4 } from 'uuid';
|
|
import { HttpException, HttpStatus } from '@nestjs/common';
|
|
import * as fs from 'fs';
|
|
import { MulterOptions } from '@nestjs/platform-express/multer/interfaces/multer-options.interface';
|
|
import { diskStorage } from 'multer';
|
|
|
|
const MB = 1024 * 1024;
|
|
|
|
const fileFilter = (req, file, callback) => {
|
|
if (file.mimetype.match(/\/(jpg|jpeg|png)$/)) {
|
|
callback(null, true);
|
|
} else {
|
|
callback(
|
|
new HttpException(
|
|
`Unsupported file type ${extname(file.originalname)}`,
|
|
HttpStatus.BAD_REQUEST,
|
|
),
|
|
false,
|
|
);
|
|
}
|
|
};
|
|
|
|
const editFileName = (req, file, callback) => {
|
|
const fileExtName = extname(file.originalname);
|
|
const randomName = uuidv4();
|
|
callback(null, `${randomName}${fileExtName}`);
|
|
};
|
|
|
|
const destinationPath = (req, file, cb) => {
|
|
let modulePath = req.body.module;
|
|
if (req.body.sub_module) modulePath = `${modulePath}/${req.body.sub_module}`;
|
|
|
|
fs.mkdirSync(`./uploads/tmp/${modulePath}`, { recursive: true });
|
|
cb(null, `./uploads/tmp/${modulePath}`);
|
|
};
|
|
|
|
export const StoreFileConfig: MulterOptions = {
|
|
storage: diskStorage({
|
|
destination: destinationPath,
|
|
filename: editFileName,
|
|
}),
|
|
fileFilter: fileFilter,
|
|
};
|