You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.5 KiB
TypeScript

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<string> => {
// 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<void> => {
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;