0

応答にカスタム ヘッダーを追加しながら、ノード サーバーを介して Amazon S3 サーバーから画像をパイプしようとしています。

ただし、現在、サーバーはプレーンな「ドキュメント」で応答し、ファイル拡張子が宣言されていない状態でコンピューターにダウンロードされます。「ドキュメント」にはまだ目的の画像データが含まれていますが、ブラウザで表示できる PNG であることをどのように明確にすればよいですか?

これが私の現在のコードです:

app.get('/skin', function (req, res) {
    res.writeHead(200, {'Content-Type': 'image/png', 'access-control-allow-origin': '*'});
    http.get("http://s3.amazonaws.com/MinecraftSkins/clone1018.png").pipe(res);
});
4

1 に答える 1

1

ヘッダーを複製して適切なプロキシとリソースの読み込みを行うために、http.request を使用することをお勧めします。
これは、ポート 8080 でリッスンし、/skin/* ルートから要求した実際の URL を使用して特定のサーバーに要求を行うエクスプレスの例です。

var http    = require('http'),
    express = require('express'),
    app     = express();

app.get('/skin/*', function(req, res, next) {
  var request = http.request({
    hostname: 's3.amazonaws.com',
    port: 80,
    path: '/' + req.params[0],
    method: req.method
  }, function(response) {
    if (response.statusCode == 200) {
      res.writeHead(response.statusCode, response.headers);
      response.pipe(res);
    } else {
      res.writeHead(response.statusCode);
      res.end();
    }
  });
  request.on('error', function(e) {
    console.log('something went wrong');
    console.log(e);
  })
  request.end();
});

app.listen(8080);

それをテストするには、自分のマシンで実行してから、次の場所に移動しhttp://localhost:8080/skin/nyc1940/qn01_GEO.png
ます。 Amazon からプロキシするイメージをロードし、そのヘッダーも返します。XML が S3 から送信されないようにするために、ヘッダーもカスタマイズできます (ファイルが存在しない場合)。

ヘッダーは s3.amazon からプロキシされるため、ヘッダーを設定する必要はありません。適切なヘッダーが確実に設定されます。
またaccess-control-allow-origin、別のドメイン名からのリソースへの AJAX 要求の場合にのみ必要になるためです。とにかく、response.headers送信する前に自由に変更してください。これは単純なオブジェクトです (console.log テスト用)。

于 2013-07-15T13:48:06.053 に答える