我的应用程序需要大量不同大小的白色占位符PNG,我无法手动创建。
因此,我使用pngjs
为我构建了一个即时构建这些图像的服务。这很好用。现在我认为在磁盘上缓存结果可能是一个好主意,但我不知道如何重用我已经管道服务器响应的图像内容(因为我可能对管道缺乏正确的理解)。
我的代码如下:
app.get('/placeholder/:width/:height', function(req, res){
var fileLocation = __dirname + '/static/img/placeholder/' + req.params.width + 'x' + req.params.height + '.png';
fs.readFile(fileLocation, function(err, file){
if (file){
res.sendfile(fileLocation);
} else {
var png = new PNG({
width: parseInt(req.params.width, 10),
height: parseInt(req.params.height, 10),
filterType: -1
});
// image creation going on..
//now all I get working is either doing:
png.pack().pipe(res);
//or
png.pack().pipe(fs.createWriteStream(fileLocation));
}
});
});
但我想要做的是使用png.pack()
的输出作为req的响应发送并同时写入磁盘。我尝试了以下几点:
var output = png.pack();
output.pipe(fs.createWriteStream(fileLocation));
res.setHeader('Content-Type', 'image/png');
res.send(output, 'binary');
但它似乎无法正常工作。
答案 0 :(得分:2)
你可以管道到多个流!
var output = png.pack()
output.pipe(fs.createWriteStream(fileLocation))
res.setHeader('Content-Type', 'image/png')
output.pipe(res)