@Slf4j
public class ZipUtils {
/**
* fileList 文件路径
*
**/
public static ByteArrayOutputStream fileToZip(List<String> fileList, String zipName, String tempFilePath) {
byte[] buffer = new byte[1024];
ZipOutputStream out = null;
try {
out = new ZipOutputStream(new FileOutputStream(tempFilePath + zipName + ".zip"));
List<File> filedata = new ArrayList<File>();
for (int i = 0, len = fileList.size(); i < len; i++) {
filedata.add(new File(fileList.get(i)));
}
for (int j = 0, len = filedata.size(); j < len; j++) {
FileInputStream fis = new FileInputStream(filedata.get(j));
out.putNextEntry(new ZipEntry(filedata.get(j).getName()));
int dataLen;
// 读入需要下载的文件的内容,打包到zip文件
while ((dataLen = fis.read(buffer)) > 0) {
out.write(buffer, 0, dataLen);
}
out.closeEntry();
fis.close();
}
out.close();
} catch (Exception ex) {
ex.printStackTrace();
}
// 读取压缩包
File filezip = new File(tempFilePath + zipName + ".zip");
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
FileInputStream inStream = new FileInputStream(filezip);
BufferedInputStream bis = new BufferedInputStream(inStream);
int c = bis.read();
while (c != -1) {
baos.write(c);
c = bis.read();
}
bis.close();
inStream.close();
} catch (Exception ex) {
ex.printStackTrace();
}finally{
boolean delete = filezip.delete();
log.info("原始文件删除状态={}",delete);
}
return baos;
}
}
//文件网页返回下载
ByteArrayOutputStream outputStream = ZipUtils.fileToZip(fileList, "原始" + zipName, tempFilePath);
// 页面输入压缩包流
byte[] buffer = outputStream.toByteArray();
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + new String((zipName + ".zip").getBytes("gb2312"), "ISO8859-1"));
response.addHeader("Content-Length", "" + outputStream.size());
toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();