引用元 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();
}
}