[Node.js] Apply image filter on Express
import fs from 'fs'; import Jimp = require('jimp'); // filterImageFromURL // helper function to download, filter, and save the filtered image locally // returns the absolute path to the local image // INPUTS // inputURL: string - a publicly accessible url to an image file // RETURNS // an absolute path to a filtered image locally saved file export async function filterImageFromURL(inputURL: string): Promise<string>{ return new Promise( async resolve => { const photo = await Jimp.read(inputURL); const outpath = '/tmp/filtered.'+Math.floor(Math.random() * 2000)+'.jpg'; await photo .resize(256, 256) // resize .quality(60) // set JPEG quality .greyscale() // set greyscale .write(__dirname+outpath, (img)=>{ resolve(__dirname+outpath); }); }); } // deleteLocalFiles // helper function to delete files on the local disk // useful to cleanup after tasks // INPUTS // files: Array<string> an array of absolute paths to files export async function deleteLocalFiles(files:Array<string>){ for( let file of files) { fs.unlinkSync(file); } }
Endpoint:
app.get('/filteredimage', async (req: Request, res: Response) => { const {image_url} = req.query; if (!image_url) { return res.status(422).send({ message: `image_url query param is required` }) } const filtered_img_path = await filterImageFromURL(image_url.toString()) res.sendFile(filtered_img_path); allFiles.push(filtered_img_path); })
We want to delete previously generate files from local, this can be done by using middleware:
let allFiles: string[] = []; const cleanUp = (req: Request, res: Response, next: NextFunction) => { const sendFile = res.sendFile.bind(res); res.sendFile = (body: any) => { sendFile(body); deleteLocalFiles(allFiles) allFiles = []; } next(); } app.use('/', cleanUp)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-03-28 [Node.js] process.nextTick for converting sync to async
2019-03-28 [Algorithm] Print 2-D array in spiral order
2017-03-28 [Grid Layout] Use auto-fill and auto-fit if the number of repeated grid tracks is not to be def
2017-03-28 [Grid Layout] Use the repeat function to efficiently write grid-template values
2017-03-28 [Grid Layout] Use the minmax function to specify dynamically-sized tracks
2017-03-28 [Jest] Snapshot
2017-03-28 [Flow] More tips about Flow