import { Request, Response } from "express"; import multer from "multer"; import path from "path"; import { logger } from "../server"; import GenerateThumbnail from "../util/generateThumbnail"; import generateUniqueFilename from "../util/generateUniqueFilename"; import { PathToRoFolder } from "../util/pathGenerators"; import { JobsListMedia } from "./jobsListMedia"; import fs from "fs-extra"; export const JobMediaUploadMulter = multer({ storage: multer.diskStorage({ destination: function (req, file, cb) { const jobid: string = (req.body.jobid || "").trim(); const DestinationFolder: string = PathToRoFolder(jobid); fs.ensureDirSync(DestinationFolder); cb(null, DestinationFolder); }, filename: function (req, file, cb) { logger.debug("Uploading file: ", path.basename(file.originalname)); cb(null, generateUniqueFilename(file)); }, }), }); export async function jobsUploadMedia(req: Request, res: Response) { const jobid: string = (req.body.jobid || "").trim(); try { if (!req.files) { res.send({ status: false, message: "No file uploaded", }); } else { logger.log( "Creating thumbnails for newly uploaded media", (req.files as Express.Multer.File[]).map((f) => f.filename) ); const thumbnailGenerationQueue: Promise[] = []; //for each file.path, generate the thumbnail. (req.files as Express.Multer.File[]).forEach((file) => { thumbnailGenerationQueue.push(GenerateThumbnail(file.path)); }); await Promise.all(thumbnailGenerationQueue); JobsListMedia(req, res); } } catch (err) { res.status(500).send(err); } }