1

私はnode.js 0.10.33を使用しており、2.51.0をリクエストしています。

以下の例では、リクエストを使用して画像をプロキシする単純な Web サーバーを構築しました。同じイメージをプロキシするために設定された 2 つのルートがあります。

/pipeは、生のリクエストをレスポンスにパイプするだけです

/callbackは、リクエストのコールバックを待機し、レスポンス ヘッダーとボディをレスポンスに送信します。

パイプの例は期待どおりに機能しますが、コールバック ルートは画像をレンダリングしません。ヘッダーとボディは同じように見えます。

画像が壊れる原因となっているコールバック ルートはどうですか?

コード例は次のとおりです。

var http    = require('http');
var request = require('request');

var imgUrl = 'https://developer.salesforce.com/forums/profilephoto/729F00000005O41/T';

var server = http.createServer(function(req, res) {

  if(req.url === '/pipe') {
    // normal pipe works
    request.get(imgUrl).pipe(res);
  } else if(req.url === '/callback') {
    // callback example doesn't
    request.get(imgUrl, function(err, resp, body) {
      if(err) {
        throw(err);
      } else {
        res.writeHead(200, resp.headers);
        res.end(body);
      }
    });
  } else {
    res.writeHead(200, {
      'Content-Type': 'text/html'
    });

    res.write('<html><head></head><body>');

    // test the piped image
    res.write('<div><h2>Piped</h2><img src="/pipe" /></div>');

    // test the image from the callback
    res.write('<div><h2>Callback</h2><img src="/callback" /></div>');

    res.write('</body></html>');
    res.end();
  }
});

server.listen(3000);

これで結果

テスト結果

4

1 に答える 1

3

問題は、bodyデフォルトで (UTF-8) 文字列であることです。バイナリ データが必要な場合は、オプションで明示的に設定する必要がencoding: nullありrequest()ます。そうすることbodyで、バイナリデータがそのままの状態でバッファが作成されます。

request.get(imgUrl, { encoding: null }, function(err, resp, body) {
  if(err) {
    throw(err);
  } else {
    res.writeHead(200, resp.headers);
    res.end(body);
  }
});
于 2014-12-15T14:58:01.677 に答える