-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfiles.config.ts
More file actions
44 lines (39 loc) · 1.31 KB
/
files.config.ts
File metadata and controls
44 lines (39 loc) · 1.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { imageMimeTypes, videoMimeTypes } from "@domain/common/constants/fileMimeTypes";
import { createUploadPath, generateFilename, isMimeTypeValid } from "@libs/utils/file";
import { INestApplication } from "@nestjs/common";
import * as express from 'express';
import { existsSync, mkdirSync } from "fs";
import { diskStorage } from "multer";
import { join } from "path";
import envConfig from "./env.config";
const uploadDir = join(process.cwd(), envConfig().UPLOAD_RELATIVE_DIR);
const multerConfig = {
storage: diskStorage({
destination: (req, file, cb) => {
const uploadPath = createUploadPath(uploadDir);
if (!existsSync(uploadPath)) {
mkdirSync(uploadPath, { recursive: true });
}
cb(null, uploadPath);
},
filename: (req, file, cb) => {
cb(null, generateFilename(file));
},
}),
fileFilter: (req, file, cb) => {
if (isMimeTypeValid(file.mimetype, imageMimeTypes) || isMimeTypeValid(file.mimetype, videoMimeTypes)) {
cb(null, true);
} else {
cb(new Error('Only images and video are allowed...'), false);
}
},
};
const configStaticFiles = (app: INestApplication) => {
if (!existsSync(uploadDir)) {
mkdirSync(uploadDir);
}
app.use('/api/uploads', express.static(uploadDir));
};
export {
configStaticFiles, multerConfig, uploadDir
};