多个文件生成zip 浏览器下载
前言
第一次写博客 只是想让自己做一些笔记 以后用到我可以在这里找到
直接上代码(多个文件生成zip 然后浏览器下载代码)
/*
* $Id:$
* Copyright 2017 sinounited.com.cn All rights reserved.
*/
package com.sino.ebid.dp.biz;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;
import com.sino.ap.constant.ApYesNoEnum;
import com.sino.ebid.dp.api.DpPreBiderReviewService;
import com.sino.ebid.dp.bo.DpPreBiderReviewGetBO;
import com.sino.ebid.dp.bo.DpPreBiderReviewQueryBO;
import com.sino.ebid.dp.dto.DpPreBiderReviewInsertDTO;
import com.sino.ebid.dp.dto.DpPreBiderReviewUpdateDTO;
import com.sino.ebid.dp.dto.DpPreBiderReviewVerifyDTO;
import com.sino.ebid.dp.qo.DpPreBiderReviewPageQO;
import com.sino.framework.exception.ServiceException;
import com.sino.framework.util.ZipUtils;
import com.sino.framework.util.files.FileInfoModel;
import com.sino.framework.util.files.FileUploadUtils;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.sino.framework.common.page.DataGrid;
import com.sino.framework.model.ResultDTO;
import com.sino.framework.model.utils.ModelUtils;
import com.sino.framework.user.UserContext;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* biz
*
* @author Sxing
* @since 2020年11月9日17:50:39
*/
@Component
public class DpPreBiderReviewBiz {
public void downloadBidFilezip(HttpServletResponse response, Long cbaId) throws Exception {
/*
*根据cbaId查询多个文件
*/
List<DpPreBiderReviewGetBO> list =
dpPreBiderReviewService.findByCbaId(cbaId).getData();
byte[] buf = new byte[1024];
// 获取输出流
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
try {
//String zipFileName = "资格审查文件";
response.reset(); // 重点突出
// 不同类型的文件对应不同的MIME类型
response.setContentType("application/x-msdownload");
response.setCharacterEncoding("utf-8");
String fileName = "资格审查文件";
//这里我也不知道为啥加这个但是不加中文出不来(如:下载出来应该是<资格审查文件.zip> 但是出现的是<.zip>)
fileName = new String(fileName.getBytes(), "ISO-8859-1");
response.setHeader("Content-disposition", "attachment;filename=" +fileName +".zip");
//文件路径
String str = "d:\\upload";
//java 转义成 windows \\
String line = File.separator;
// ZipOutputStream类:完成文件或文件夹的压缩
ZipOutputStream out = new ZipOutputStream(bos);
//循环多个文件 将每个文件加载到zip中
for (int i = 0; i < list.size(); i++) {
FileInputStream in = new FileInputStream(str+line+list.get(i).getDocSaveUrl());
// 给列表中的文件单独命名
//getRandomZipFileName()方法, 生成当前时间+1000内随机数 如:20201014105810_563
out.putNextEntry(new ZipEntry(getRandomZipFileName()+list.get(i).getDocOldName()));
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.closeEntry();
in.close();
}
out.close();
bos.close();
System.out.println("压缩完成.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
控制层
/**
* 根据报名id下载资格审查条款文件zip压缩包
* @param resp响应头
* @param cpbrId 报名id
* @throws Exception
*/
@RequestMapping(value = "downloadBidFilezip", method = RequestMethod.GET)
public void downloadBidFilezip(HttpServletResponse resp, Long cbaId) throws Exception {
dpPreBiderReviewBiz.downloadBidFilezip(resp, cbaId);
}
好了 到这里就结束了 拜拜