質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

3895閲覧

Java responseにセットしたコンテンツを破棄することはできますか?

take-chan

総合スコア17

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/02/25 02:54

編集2016/02/25 06:27

JavaでWebアプリケーション開発をしています。
以下のようなコードで、responseから取得したoutstreamにて、
Excelファイルを生成するServiceを実行しているのですが。
この処理の後に何らかの判定を入れて設定したコンテンツを破棄することを検討しているのですが、実現可能でしょうか?

どなたか回答をお願い致します。

response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileNm + "\""); ExcelCreateService service = getService(ExcelCreateService.class); service.setIdList(IdList); service.setOutputStream(response.getOutputStream()); service.execute();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

全体の利用頻度やメモリにもよりますが、
responseのgetOutputStreamに出力する前に、
ByteArrayOutputStream や FileOutputStreamで、byte配列かファイルに書き出して、
判定をしてから、
response.getOutputStreamに流せば実現できます。

java

1response.setContentType("application/octet-stream"); 2response.setHeader("Content-Disposition", "attachment; filename=\"" + fileNm + "\""); 3setDownloadFile(response, outputFileName); 4ExcelCreateService service = getService(ExcelCreateService.class); 5 6ByteArrayOutputStream bout = new ByteArrayOutputStream(); 7service.setIdList(IdList); 8service.setOutputStream(bout); 9service.execute(); 10 11bout.flush(); 12bout.close(); 13 14/* some if .. */ 15byte[] bytes = bout.toByteArray(); 16response.setContentLength(bytes.length); 17response.getOutputStream().write(bytes); 18response.flushBuffer();

投稿2016/02/25 03:22

thesecret11

総合スコア234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

take-chan

2016/02/25 06:30

早急にご回答頂きありがとうございました。 setContentType,setHeaderの位置は変更させて頂きましたが、 以下のコードでやりたいことが実現できました。 本当にありがとうございます。 ExcelCreateService service = getService(ExcelCreateService.class); ByteArrayOutputStream bout = new ByteArrayOutputStream(); service.setIdList(IdList); service.setOutputStream(bout); service.execute(); bout.flush(); bout.close(); /* some if .. */ byte[] bytes = bout.toByteArray(); setDownloadFile(response, outputFileName); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileNm + "\""); response.setContentLength(bytes.length); response.getOutputStream().write(bytes); response.flushBuffer();
guest

0

ServletResponse#reset とかでできないですか?

投稿2016/02/25 03:10

root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

take-chan

2016/02/25 06:32

早急に回答ありがとうございました。 頂いた回答でもやりたいことが実現できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問