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

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

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

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

Q&A

解決済

2回答

7434閲覧

Javaを使ったCSVファイルのダウンロードについて

Kanbotu

総合スコア13

Java

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

0グッド

0クリップ

投稿2018/01/09 11:48

現在、下記のようにJavaでCSVファイルを2つダウンロードする処理を作成しようとしています。

response.setContentType("application/octet-stream")
response.setHeader("Content-Disposition", "attachment"; filename=" + fileName);

FileInputStream in = new FileInputStream(file);
printWriteer pw = response.getWriter();

int idx;
While((idx = in.read()) != -1) {
pw.write(idx);

pw.flush();
pw.close();
in.close();

上記の処理を2回行うことでファイルを2つダウンロードできないかと考えたのですが、responseのファイル名が2回に書き変わらなく、ファイルが1つしかできない状態です。

また、OutputStreamがシステムの作り上、使用するとエラーが発生してしまうため使うことができません。
※他の箇所でresponse.getWriterを使用してる為呼び出せない

解決策のご教授よろしくお願いします。

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

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

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

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

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

guest

回答2

0

そもそもHTTPリクエスト1個に対し、レスポンスで返せるファイルは1個ですよ?1回のリクエストで2つ以上のファイルを同時に返すことは出来ません。ブラウザすら自前で実装すれば不可能ではないですが、一般的なブラウザは複数のファイルの同時受信という機能は持っていません。
一般的にそういった「複数のファイルを返すサービス」というのは、返したいファイルをzip圧縮でまとめて1ファイルにしてしまって、それをレスポンスで返すようにしています。

投稿2018/01/10 00:20

masaya_ohashi

総合スコア9206

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

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

0

ベストアンサー

コンテンツタイプにmultipart/x-mixed-replaceを指定してマルチパートなレスポンスを返すことで可能ですが、この方法はもともとNetscapeの技術なので、マイクロソフト系のブラウザでは動かないようです。以下のような構成になります。

java

1response.setContentType("multipart/x-mixed-replace;boundary=END"); 2ServletOutputStream out = response.getOutputStream(); 3out.println(); 4out.println("--END"); 5out.flush(); 6 7out.println("Content-Type: application/octet-stream"); 8out.println(); 9 10// ここで1つ目のファイルをoutに出力 11 12out.println(); 13out.println("--END"); 14out.flush(); 15 16out.println("Content-Type: application/octet-stream"); 17out.println(); 18 19// ここで2つ目のファイルをoutに出力 20 21out.println(); 22out.println("--END--"); 23out.flush(); 24out.close();

投稿2018/01/10 12:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問