0

私のアプリには、手動で作成できないさまざまなサイズの大量の白いプレースホルダー 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()の出力を使用して、要求の応答として送信し、同時にディスクに書き込むことです。私は次の行に沿って何かを試しました:

var output = png.pack();
output.pipe(fs.createWriteStream(fileLocation));

res.setHeader('Content-Type', 'image/png');
res.send(output, 'binary');

しかし、それは正しく機能していないようです。

4

1 に答える 1

2

複数のストリームにパイプできます!

var output = png.pack()
output.pipe(fs.createWriteStream(fileLocation))
res.setHeader('Content-Type', 'image/png')
output.pipe(res)
于 2013-11-11T09:26:33.280 に答える