import RequestContext from "../scope/RequestContext"; import {SCAN_TYPE} from "../@types/types"; import {applicationContext} from "../context/ApplicationContext"; import DiSupplier from "../injection/DiSupplier"; import {logger} from "../logger/Logger"; import CommonDao from "../database/CommonDao"; import multer, {FileFilterCallback, StorageEngine, } from 'multer'; import {Request} from "express"; import {BEAN_META} from "../@types/DynamicInject"; // process.env.UPLOAD_PATH // /** // * A `StorageEngine` responsible for processing files uploaded via Multer. // * Takes precedence over `dest`. // */ // storage?: StorageEngine | undefined; // /** // * The destination directory for uploaded files. If `storage` is not set // * and `dest` is, Multer will create a `DiskStorage` instance configured // * to store files at `dest` with random filenames. // * // * Ignored if `storage` is set. // */ // dest?: string | undefined; // /** // * An object specifying various limits on incoming data. This object is // * passed to Busboy directly, and the details of properties can be found // * at https://github.com/mscdex/busboy#busboy-methods. // */ // limits?: { // /** Maximum size of each form field name in bytes. (Default: 100) */ // fieldNameSize?: number | undefined; // /** Maximum size of each form field value in bytes. (Default: 1048576) */ // fieldSize?: number | undefined; // /** Maximum number of non-file form fields. (Default: Infinity) */ // fields?: number | undefined; // /** Maximum size of each file in bytes. (Default: Infinity) */ // fileSize?: number | undefined; // /** Maximum number of file fields. (Default: Infinity) */ // files?: number | undefined; // /** Maximum number of parts (non-file fields + files). (Default: Infinity) */ // parts?: number | undefined; // /** Maximum number of headers. (Default: 2000) */ // headerPairs?: number | undefined; // } | undefined; // /** Preserve the full path of the original filename rather than the basename. (Default: false) */ // preservePath?: boolean | undefined; // /** // * Optional function to control which files are uploaded. This is called // * for every file that is processed. // * // * @param req The Express `Request` object. // * @param file Object containing information about the processed file. // * @param callback a function to control which files should be uploaded and which should be skipped. // */ // fileFilter?( // req: Request, // file: Express.Multer.File, // callback: FileFilterCallback, // ): void; // const fileUpload = multer({ // limits: {fileSize:500000}, // storage: multer.diskStorage({ // destination: (req, file, cb) => { // cb(null, "uploads/test"); // }, // // filename: (req, file, cb) => { // const ext = MIME_TYPE_MAP[file.mimetype]; // cb(null, uuid() + "." + ext); // }, // }), // // fileFilter: (req, file, cb) => { // const isValid = !!MIME_TYPE_MAP[file.mimetype]; // let error = isValid ? null : new Error("Invalid mime type!"); // cb(error as any, isValid); // }, // }) const commonMulter = multer(); export class FileUploadUtil { public static async getMultiparts(rc:RequestContext, fileName:string):Promise{ const req = rc.request; const res = rc.request.response; return new Promise((resolve, reject)=>{ commonMulter.array(fileName)(req, res, function (err) { try { if (err instanceof multer.MulterError) { // A Multer error occurred when uploading. logger.debug(err) resolve(undefined); } else if (err) { logger.debug(err) // An unknown error occurred when uploading. resolve(undefined); } if(!req.files || req.files.length < 1) { resolve(undefined); } if(req.files.length == 1) { resolve(req.files[0]); } resolve(req.files); } catch (e) { resolve(undefined); } }) }) } }