import express from "express" import fs from "fs" import path from "path" import sharp from "sharp" const image = express.Router(); const resizeImg = async (width: number, height: number, inputimgPath: string, fileName: string): Promise => { // output file for resized img let outputImg = path.resolve("images/thumb", `${fileName}.jpg`); await sharp(path.resolve(inputimgPath)) .resize(width, height) .toFormat("jpeg") .jpeg({ quality: 100, mozjpeg: true }) .toFile(path.resolve(outputImg)) return outputImg } image.get('/', async (req: express.Request, res: express.Response): Promise => { let fileName = req.query.filename as string; let width = parseInt(req.query.width as string); let height = parseInt(req.query.height as string); // fetch file from server let inputimgPath: string = path.resolve("images/full", `${fileName}.jpg`); // check if the inputFile exist if (!fs.existsSync(inputimgPath)) { res.status(404).send("Image not found"); return; } // display image if we have fileName, width, height attributs in the request if (fileName && width && height) { //resize image let outputImg: string = await resizeImg(width, height, inputimgPath, fileName); res.sendFile(outputImg); } else if (fileName) { // display original image if we only have filename parameter in the request res.sendFile(inputimgPath); } }) export default image;