バイト配列をインラインでダウンロードしたい

自分が必要だったのがJPEG画像だったので、DynamicImageResourceとかが気になってちょっと迷走した。
忘れないようにメモ。

add(new Link<Void>("downloadButton"){
  @Override
  public void onClick() {
    byte[] byteArray = /* データ生成 */
    ByteArrayResource resource = new ByteArrayResource("image/jpeg", byteArray);
    IResourceStream stream = resource.getResourceStream();
    getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(stream, "test.jpg"));
  }
});

こうかな。

ちなみに迷走して書いた処理。画像ならこれでも動くけど。

add(new ResourceLink<Void>("downloadButton", new DynamicImageResource("jpeg") {
  @Override
  protected byte[] getImageData() {
    byte[] byteArray = /* データ生成 */
    return byteArray;
  }
  @Override
  protected void setHeaders(WebResponse response) {
    super.setHeaders(response);
    response.setAttachmentHeader("test.jpg");
  }
}));

ちなみに、DynamicImageResourceは内部でBufferedImageに一度変換してることに今回のコレで気づきました。
元データがjpegなのにブラウザではpngになってたりして、疑問には思ってたんだよね。
imageioはてんで詳しくないのだけれど、パフォーマンス的にオーバーヘッドにならんのかな?