Node.js Jimp处理图像后下载图像文件
我有回家的路线。在这个主页路径中,我使用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');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)/
})当试图重现您的错误时,我在向节点服务器发送请求时在浏览器中下载了一个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')完成并解析返回的承诺