cosette/server/services/upload-service.ts
2022-08-22 17:18:45 +02:00

46 lines
No EOL
1 KiB
TypeScript

import multer from 'multer'
import type { Options } from 'multer'
import fs from 'fs'
import { v4 } from 'uuid'
import path from 'path'
export const uploadService = () => {
let folderPath = './public/'
if (!fs.existsSync(folderPath)) {
fs.mkdirSync(folderPath, { recursive: true })
}
const { limits: templateLimits }: Options = {
limits: {
files: 1,
fieldNameSize: 400,
fileSize: 80 * 1024 * 1024,
},
};
const { filename }: multer.DiskStorageOptions = {
filename: (_req, file, cb) => {
const type = path.extname(file.originalname)
cb(null, v4() + type)
}
}
const generateHandler = () => {
try {
const options: Options = {
limits: {
...templateLimits,
},
storage: multer.diskStorage({
filename,
destination: folderPath
}),
};
return multer(options).single('imgs');
} catch (e) {
console.error('Upload error', e)
throw e;
}
};
return { generateHandler };
};