0

netty 3.6 に基づいて、小さな HTTP サーバーを Java デスクトップ アプリケーションに実装しています。ここまでで、基本的な HTTP サーバー レイアウトの作成に成功しました。さまざまなテキスト ベースのファイルをブラウザー ベースのクライアントに送信できます。

私の netty サーバー パイプライン ファクトリでは、次のように新しいチャネル パイプラインを作成します。

pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("aggregator", new HttpChunkAggregator(1048576));
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("handler", new HttpServerHandler());

私のHttpServerHandlerクラスでは、次のようにテキストデータをクライアントに送信します。

HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
response.setHeader(CONTENT_TYPE, contentType + "; charset=UTF-8");
response.setHeader(PRAGMA, "no-cache");
response.setContent(ChannelBuffers.copiedBuffer(responseText, CharsetUtil.UTF_8));

if(keepAlive)
{
    response.setHeader(CONTENT_LENGTH, response.getContent().readableBytes());
    response.setHeader(CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
}

ChannelFuture future = e.getChannel().write(response);

良い。さらに、クライアントにバイナリ データ (画像など) を送信したいと考えています。これを達成する方法に関するオンラインの例が見つからなかったため、2 つの質問があります。

  1. テキスト データとバイナリ データの両方をクライアントに送信できるようにするには、チャネル パイプラインをどのように変更する必要がありますか?
  2. HttpServerHandlerバイナリ ファイルをクライアントに送信するためにクラスを変更する方法は?
4

1 に答える 1

0

コンテキストとバイナリの間にこれ以上の違いはないと思います。あなたがする必要があるのは、コンテンツタイプを正しく設定することだと思います。次に、ブラウザはそれを処理する方法を知っています。

png ファイルをブラウザに送信する場合は、content-type を「image/png」に設定します。

于 2013-06-22T13:19:13.970 に答える