Node.js Jimp处理图像后下载图像文件

Node.js Jimp处理图像后下载图像文件,node.js,express,Node.js,Express,我有回家的路线。在这个主页路径中,我使用Jimp库处理图像,调整其大小,然后更改质量,最后将图像保存在目录中,但我想下载图像,以便用户可以在其机器上下载。但它不是下载。我正确地保存在名为output.jpg的目录中。这是密码 应用程序获取(“/”,(请求,请求)=>{ res.type('jpg'); res.attachment('output.jpg') jimp.read('lenna.png',(err,lenna)=>{ 如果(错误)抛出错误; 莱娜 .resize(256,256)/

我有回家的路线。在这个主页路径中,我使用Jimp库处理图像,调整其大小,然后更改质量,最后将图像保存在目录中,但我想下载图像,以便用户可以在其机器上下载。但它不是下载。我正确地保存在名为output.jpg的目录中。这是密码

应用程序获取(“/”,(请求,请求)=>{

res.type('jpg'); res.attachment('output.jpg')

jimp.read('lenna.png',(err,lenna)=>{ 如果(错误)抛出错误; 莱娜 .resize(256,256)//调整大小 .quality(60)//设置JPEG质量 .greyscale()//设置灰度 .write('output.jpg');//保存

res.download('output.jpg');
})

当试图重现您的错误时,我在向节点服务器发送请求时在浏览器中下载了一个jpg文件,但该文件似乎有故障。 原因是jimp.write()是一个异步函数,因此

res.download('output.jpg')
在jimp.write()将文件写入磁盘之前执行。 要在文件完全写入磁盘后发送文件,有两个选项可以使用jimp.write,这两个选项都有文档记录

下面是我的快速代码,用于重现和修复该问题

通过回调使用jimp.write

const express = require('express')
const app = express()
var jimp = require('jimp');

app.get("/", (req, res) => {
    res.type('jpg');
    res.attachment('output.jpg');
    jimp.read('lenna.png', (err, lenna) => {
        if (err) throw err; 
        lenna.resize(256, 256) // resize
        .quality(60) // set JPEG quality
        .greyscale() // set greyscale
        .write('output.jpg', res.download('output.jpg')); // save
    });
});

app.listen(3000);
重要的一行是将res.download()放入jimp.write()的回调中,该回调在jimp将文件写入磁盘时执行

.write('output.jpg', res.download('output.jpg')); // save
使用jimp.writeAsync返回承诺

const express = require('express')
const app = express()
var jimp = require('jimp');

app.get("/", (req, res) => {
    res.type('jpg');
    res.attachment('output.jpg');
    jimp.read('lenna.png', async (err, lenna) => {
        if (err) throw err; 
        await lenna.resize(256, 256) // resize
        .quality(60) // set JPEG quality
        .greyscale() // set greyscale
        .writeAsync('output.jpg'); // save
        res.download('output.jpg');
    });
});

app.listen(3000);
使用async并等待lenna。(…….writeAsync('output.jpg')完成并解析返回的承诺