2016-04-29 12 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。私はさらにチェック(フォーマットなど)をしたいという状況にあります。これらの小切手を.size()の中に入れ子にするように私に提案しますか? – nodesto