参考博主: (30条消息) java实现解压文件并返回文件流(工具类,适合所有框架)_反回流文件工具类_喜欢千千呐的博客-CSDN博客
本案例功能实现 : 前端传过来的流解压为流的形式
所需的参数: MultipartFile zip的包的文件流
解压后返回 : zip中每个文件的MultipartFile类型
代码
public class UnZipUtil {
public static List<MultipartFile> UnZip(MultipartFile multipartFiles){
String originalFilename = multipartFiles.getOriginalFilename();
//是否是zip文件类型
if (!originalFilename.endsWith(".zip")){
throw new RuntimeException(originalFilename+"文件格式错误!请上传.zip格式文件");
}
//解压
List<MultipartFile> multipartFileList = new ArrayList<>();
ZipInputStream zipInputStream = null;
BufferedInputStream bufferedInputStream = null;
String zipEntryFile;
try {
zipInputStream = new ZipInputStream(multipartFiles.getInputStream());
bufferedInputStream = new BufferedInputStream(zipInputStream);
ZipEntry zipEntry;
while ((zipEntry = zipInputStream.getNextEntry())!=null){
zipEntryFile = zipEntry.getName();
//文件名称为空
Assert.notNull(zipEntryFile,"压缩文件中子文件的名字格式不正确");
//每个文件的流
byte[] bytes = new byte[(int)zipEntry.getSize()];
bufferedInputStream.read(bytes,0,(int)zipEntry.getSize());
InputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
MultipartFile multipartFile = null;//new MockMultipartFile(zipEntryFile,byteArrayInputStream);
multipartFileList.add(multipartFile);
byteArrayInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (bufferedInputStream!=null){
try {
bufferedInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (zipInputStream!=null){
try {
zipInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return multipartFileList;
}
}