61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
import { Request, Response } from "express";
|
|
import multer from "multer";
|
|
import path from "path";
|
|
import GenerateThumbnail from "../util/generateThumbnail";
|
|
import { FolderPaths } from "../util/serverInit";
|
|
import { JobsListMedia } from "./jobsListMedia";
|
|
|
|
export const JobMediaUploadMulter = multer({
|
|
storage: multer.diskStorage({
|
|
destination: function (req, file, cb) {
|
|
const ro_number: string = (req.body.ro_number || "").trim();
|
|
const DestinationFolder: string = path.join(FolderPaths.Jobs, ro_number);
|
|
cb(null, DestinationFolder);
|
|
},
|
|
filename: function (req, file, cb) {
|
|
console.log(path.basename(file.originalname));
|
|
cb(
|
|
null,
|
|
`${file.originalname}-${Math.floor(Date.now() / 1000)}.${path.extname(
|
|
file.originalname
|
|
)}`
|
|
);
|
|
},
|
|
}),
|
|
});
|
|
|
|
export async function jobsUploadMedia(req: Request, res: Response) {
|
|
const ro_number: string = (req.body.ro_number || "").trim();
|
|
|
|
try {
|
|
if (!req.files) {
|
|
res.send({
|
|
status: false,
|
|
message: "No file uploaded",
|
|
});
|
|
} else {
|
|
const thumbnailGenerationQueue: Promise<void>[] = [];
|
|
|
|
//for each file.path, generate the thumbnail.
|
|
(req.files as Express.Multer.File[]).forEach((file) => {
|
|
thumbnailGenerationQueue.push(
|
|
GenerateThumbnail(
|
|
file.path,
|
|
path.join(
|
|
FolderPaths.Jobs,
|
|
ro_number,
|
|
FolderPaths.ThumbsSubDir,
|
|
file.originalname
|
|
)
|
|
)
|
|
);
|
|
});
|
|
await Promise.all(thumbnailGenerationQueue);
|
|
|
|
JobsListMedia(req, res);
|
|
}
|
|
} catch (err) {
|
|
res.status(500).send(err);
|
|
}
|
|
}
|