1.压缩文件
ByteArrayOutputStream byteArrayOutputStream1 = new ByteArrayOutputStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream1);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
List<CausePhPc> causePhPcs = causePhPcService.getBaseMapper().selectList(new QueryWrapper<CausePhPc>().select());
List<CausePhPcDTO> causePhPcDTOS = new ArrayList<>();
causePhPcs.stream().forEach(
cpp -> {
CausePhPcDTO causePhPcDTO = new CausePhPcDTO();
causePhPcDTO.setBasePc(String.valueOf(cpp.a()));
causePhPcDTO.setBigDataPc(String.valueOf(cpp.a()));
causePhPcDTO.setCollectionPc(String.valueOf(cpp.a()));
}
);
EasyExcel.write(byteArrayOutputStream, CausePhPcDTO.class).sheet("causePhPcs").doWrite(causePhPcDTOS);
String name = "test.xlsx";
InputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
int len;
zipOutputStream.putNextEntry(new ZipEntry(name));
byte[] bytes = new byte[1024];
while ((len = byteArrayInputStream.read(bytes)) > 0) {
zipOutputStream.write(bytes, 0, len);
}
byteArrayInputStream.close();
zipOutputStream.closeEntry();
zipOutputStream.close();
response.setContentType(MediaType.APPLICATION_OCTET_STREAM.getType());
response.addHeader("Access-Control-Expose-Headers", "filename");
response.addHeader("filename", URLEncoder.encode(name, "UTF-8"));
response.setContentLength(byteArrayOutputStream1.size());
ServletOutputStream outputStream = response.getOutputStream();
byteArrayOutputStream1.writeTo(outputStream);
byteArrayOutputStream1.close();
outputStream.flush();
2.解压文件
String filename = file.getOriginalFilename();
//读取压缩包中的文件
try {
if (filename.matches(".*\\.zip")) {
ZipInputStream zs = new ZipInputStream(file.getInputStream(), Charset.defaultCharset());//解决中文文件夹乱码
BufferedInputStream bs = new BufferedInputStream(zs);
ZipEntry ze;
byte[] xlsFile;
while ((ze = zs.getNextEntry()) != null) {
String name = ze.getName();
InputStream is;
if (name.endsWith("xlsx") || name.endsWith("xls")) {
long size = ze.getSize();
if (size > 0) {
xlsFile = new byte[(int) ze.getSize()];
bs.read(xlsFile, 0, (int) ze.getSize());
is = new ByteArrayInputStream(xlsFile);
} else {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while (true) {
int bytes = zs.read();
if (bytes == -1) {
break;
}
baos.write(bytes);
}
baos.close();
is = new ByteArrayInputStream(baos.toByteArray());
}
if (StringUtils.equals(name, "test.xlsx")) {
pcImport(is);
is.close();
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}