2016-04-29 100 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