引用元 http://kawamura-mark2.hatenablog.jp/entry/2015/11/11/125208
仕組みを理解したら、このページを消すこと!!
バイナリデータのリスト dataList = getDataList(); // 日本語ファイル名対応 String encodFile = URLEncoder.encode(this.fileName, "UTF-8"); // ヘッダー情報設定 response.setHeader("Content-Transfer-Encoding", "binary"); response.setHeader("Content-Type", "application/zip;charset=UTF-8"); response.setHeader("Content-disposition", "attachment; filename=\"" + encodFile + "\"; filename*=utf-8'ja'" + encodFile); // ZIPファイルを書込む為の出力ストリームを、HTTPコンテンツ本体へのバイナリ出力として初期化する。 ZipOutputStream zipOutStream = new ZipOutputStream(response.getOutputStream()); zipOutStream.setEncoding("MS932"); // ファイル出力 try { // zip作成 for (バイナリデータ imageRecord : バイナリデータのリスト) { // 取得イメージを、ZIP書込み ByteArrayOutputStream objBos; objBos = new ByteArrayOutputStream(imageRecord.getImegeInfo().length); objBos.write(imageRecord.getImegeInfo(), 0, imageRecord.getImegeInfo().length); objBos.close(); // ZipOutputStreamにZipEntryを設定 ZipEntry objZe = new ZipEntry(fileName); objZe.setMethod(ZipOutputStream.DEFLATED); zipOutStream.putNextEntry(objZe); // 取込イメージ情報を書込み byte[] aryByt = objBos.toByteArray(); zipOutStream.write(aryByt, 0, aryByt.length); // ZipEntryのクローズ zipOutStream.closeEntry(); } zipOutStream.close(); } catch (Exception e) { // エラー処理 } finally { if (zipOutStream != null) { zipOutStream.close(); } }