import DI, {DDNames} from "@gongt/ts-stl-library/DI"; import * as multer from "multer"; import {diskStorage, Instance, memoryStorage} from "multer"; import {tmpdir} from "os"; import {MulterFileFilter, MulterFileLimits} from "./multer.types"; initFileUploadLimits({ fieldSize: 1024 * 1024, fields: 1000, fileSize: 1024 * 1024, // 1mb }); DI.set(DDNames.multerCreator, createFileHandler); export function initDiskStorage(destination) { DI.set(DDNames.multerStorage, diskStorage({destination})); } export function initMemoryStorage() { DI.set(DDNames.multerStorage, memoryStorage()) } export function initFileUploadLimits(limits: MulterFileLimits) { DI.set(DDNames.multerDefaults, limits) } export function createFileHandler(limits: MulterFileLimits = {}, fileFilter?: MulterFileFilter): Instance { limits = Object.assign(DI.get(DDNames.multerDefaults), limits); let storage = DI.get(DDNames.multerStorage, false); if (!storage) { initDiskStorage(tmpdir()); storage = DI.get(DDNames.multerStorage, true); } return multer({ storage: storage, limits, fileFilter, }); }