2

Undertow で .jpeg、.png、またはその他のコンテンツを配信する方法を見つけるのに苦労しています。byte[] の送信は機能しません。また、Undertow はノンブロッキングであるため、通常の方法で出力にファイルを書き込みたくありません。

exchange.getOutputStream().write(myFileByteArray);

私がそれを達成できる他の方法はありますか?また、Undertow のデフォルトの Base64 ライブラリを使用して Base64 で画像をエンコードしましたが、どちらも機能しませんでした。

編集:コードを提供する:これは、ファイルをエンコードする私の方法です。.js、.html などのテキスト ファイルでは機能しますが、画像では機能しません。ただし、エンコーディングは機能しているので、要求した人に返送するときに何か間違っているかどうかという質問があります。

これは私がどのように応答しているかです:(スタックオーバーフローの目的でハードコードされています)

exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "image/jpeg");
exchange.getResponseSender().send(getResource(resource, true));

アンダートウ側で例外はありません。画像がブラウザに表示されません。ブラウザは、画像をデコードできないと言っています..

ありがとう。

4

1 に答える 1

3

さて、私の MIME 構成が正しいかどうかを考えるために多くの作業を行った後、交換オブジェクトの OutputStream にファイルを書き込むだけでよいことが実際にわかりました。

これが私がしたことです:

if(!needsBuffering){
    exchange.getResponseSender().send(getResource(resource));
}else{
    exchange.startBlocking();
    writeToOutputStream(resource, exchange.getOutputStream());
}

...

private void writeToOutputStream(String resource, OutputStream oos) throws Exception {

    File f = new File(this.definePathToPublicResources() + resource);

    byte[] buf = new byte[8192];

    InputStream is = new FileInputStream(f);

    int c = 0;

    while ((c = is.read(buf, 0, buf.length)) > 0) {
        oos.write(buf, 0, c);
        oos.flush();
    }

    oos.close();
    is.close();

}
于 2015-05-27T13:36:59.507 に答える