色々な種類のファイルをzip化することが出来るのですが、
ここでは、例としてPDFファイルをZIP化してダウンロードさせるソースを書いてみます。
ポイントはZIPファイルをサーバに保持せずに、ストリームでダウンロードさせるところです。
//コントローラでの処理になります。 @PostMapping(value="doDownloadZip") public void doDownloadPdf(HttpServletResponse response) throws Exception{ //各種変数を用意 byte[] buf = new byte[1024]; int len; InputStream in = null; //ダウンロード対象のコンテンツタイプを指定 response.setContentType("application/zip"); //文字コードを指定 response.setCharacterEncoding("windows-31j"); //ヘッダ情報をセットする。 response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("AAA.zip", "windows-31j")); response.setHeader("Content-Encoding", "binary"); //ZIP処理を開始する。 // tryの引数としてファイル操作を指定するとクローズ処理は不要となるのでオススメ try (ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()))) { //※複数のPDFをzip化する必要がある場合には、ループなどで下記すべての処理を繰り返してください。 //インプットストリームに対象のファイルをセット ※実際にはここは動的で取得することになります。 in = new FileInputStream("/pdf/test1.pdf"); // ZIPへのの書き込みを開始する。 zos.putNextEntry(new ZipEntry(new File("test1.pdf")); //※実際にはここは動的で取得することになります。 while ((len = in.read(buf)) > 0) { zos.write(buf, 0, len); } } catch (FileNotFoundException e) { // ファイルが存在しない場合のエラー throw e; } finally { if (in != null) { in.close(); }; } }
コメント