2016-04-29 102 views
2

我想在将图像保存到磁盘之前验证图像。我正在使用GM库。节点js流中的执行顺序

// Running an Express app 
 

 
app.post('/image', function(req, res) { 
 
    var stream = 
 
    gm(req) 
 
    .size({ bufferStream: true }, function(err, size) {  
 
     if (size.width > 2000) { 
 
     return res.send('Too big, aborting upload!'); 
 
     } 
 
    }) 
 
    .stream(function(err, stdout, stderr) { 
 
     save(stdout, res);  
 
    });  
 
}); 
 

 
function save(stream, res) { 
 
    var file = fs.createWriteStream('./test-image.png'); 
 
    stream.pipe(file); 
 
    res.send('Saving image to disk'); 
 
}

我的问题是,我执行save功能之前,我已经验证的图像。如何确保只有在流有效的情况下才继续流?

回答

1

GM将所有操作添加到列表中,并在写入操作之前执行它们,因此这种行为很有意义。这是一个解决方法:

app.post('/image', function(req, res) {         
    var file = fs.createWriteStream('./test-image.png'); 

    var stream = 
    gm(req) 
    .size({ bufferStream: true }, function(err, size) {  
     if (size.width > 2000) { 
     return res.send('Too big, aborting upload!'); 
     } 
     this.stream().pipe(file); 
     res.send('Saving image to disk'); 

}); 
+0

Thx for response。我也想要做更多的检查(格式等)。你会建议我将这些检查嵌入* .size()中吗? – nodesto