バイト配列をインラインでダウンロードしたい
自分が必要だったのが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はてんで詳しくないのだけれど、パフォーマンス的にオーバーヘッドにならんのかな?