1

たとえば、1 つの応答で 1 つの zip ファイルと 1 つの csv ファイルをダウンロードしたいとします。これらの 2 つのファイルを 1 つの zip ファイルに圧縮する以外に方法はありますか。

4

3 に答える 3

3

ServletResponse はこれを行うためのものではありませんが、IE を除くすべてのクライアント ブラウザーが適切に処理するように見える複数のファイルを送信するようにプログラムで微調整することができます。サンプル コード スニペットを以下に示します。

response.setContentType("multipart/x-mixed-replace;boundary=END");
ServletOutputStream out = response.getOutputStream();
out.println("--END");
for(File f:files){
      FileInputStream fis = new FileInputStream(file);
      BufferedInputStream fif = new BufferedInputStream(fis);
      int data = 0;
      out.println("--END");
      while ((data = fif.read()) != -1) {
        out.write(data);
      }
      fif.close();
      out.println("--END");
      out.flush();
}
out.flush();
out.println("--END--");
out.close();

これは IE ブラウザーでは機能しません。注意 - Try Catch ブロックは含まれていません

于 2013-10-18T05:04:52.487 に答える
0

いいえ、それはできません。その理由は、リクエストでデータを送信したい場合は常に、リクエストで利用可能なスチームを使用し、 を使用してこのデータをrequest.getRequestParameter("streamParamName").getInputStream()取得するためです。また、このストリームを既に使用している場合は、再度取得できなくなることに注意してください。

上記の例は、Google が複数の添付ファイルを含むマルチパート メールを送信する際にも使用する微調整です。各アタッチメントの境界を定義するために、クライアントはこの情報を取得してレンダリングする際にこれらの境界を処理する必要があります。

于 2013-10-18T06:22:26.280 に答える