public void fileUpload(MultipartFile[] multipartFiles) {
for (MultipartFile multipartFile : multipartFiles) {
// 多个文件压缩成一个
try {
InputStream inputStream = multipartFile.getInputStream();
String originalFilename = multipartFile.getOriginalFilename();
assert originalFilename != null;
if (multipartFile.isEmpty()) {
if (!originalFilename.contains(".")) {
System.out.println("找不到对应的文件:" + originalFilename);
continue;
}
}
String suffixName = originalFilename.substring(originalFilename.lastIndexOf(File.separator) + 1);
copyFilesToFolder(inputStream, suffixName);
// 切割压缩包
splitZip();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void copyFilesToFolder(InputStream inputStream, String suffixName) {
// 临时文件夹
String fileFolderPath = "D:\\files4\\test\\folderTest";
String filePath = fileFolderPath + File.separator + suffixName;
try (FileOutputStream fileOutputStream = new FileOutputStream(filePath)) {
// 把文件全部放进去
byte[] bytes = new byte[1024];
int len = 0;
while ((len = inputStream.read(bytes)) > 0) {
fileOutputStream.write(bytes, 0, len);
}
fileOutputStream.flush();
//压缩文件夹
filesToZip(fileFolderPath);
} catch (Exception e) {
e.printStackTrace();
}
}
private void filesToZip(String fileFolderPath) throws IOException {
File fileToZipped = new File(fileFolderPath);
if (fileToZipped.exists()) {
try (
FileOutputStream fileOutputStream = new FileOutputStream(fileFolderPath + ".zip");
ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream)
) {
addFilesToZip(fileToZipped, zipOutputStream);
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("文件夹不存在");
}
}
private void addFilesToZip(File fileToZipped, ZipOutputStream zipOutputStream) throws IOException {
File[] files = fileToZipped.listFiles();
byte[] bytes = new byte[1024];
int bytesRead;
assert files != null;
for (File file : files) {
if (file.isDirectory()) {
addFilesToZip(file, zipOutputStream);
} else {
try (
BufferedInputStream bis = new BufferedInputStream(Files.newInputStream(file.toPath()), bytes.length)
) {
zipOutputStream.putNextEntry(new ZipEntry(fileToZipped.getName() + "/" + file.getName()));
while ((bytesRead = bis.read(bytes, 0, bytes.length)) != -1) {
zipOutputStream.write(bytes, 0, bytesRead);
}
zipOutputStream.flush();
zipOutputStream.closeEntry();
System.out.println("压缩文件成功!");
}
}
}
}
合包
private static void mergeFiles(String destPath) {
File[] files= new File(destPath).listFiles();
assert files != null;
String filename=files[0].getName();
filename=filename.substring(0,filename.lastIndexOf("."));
try {
BufferedOutputStream bos=new BufferedOutputStream(Files.newOutputStream(Paths.get(destPath + File.separator + filename)));
BufferedInputStream bis;
byte[] bytes=new byte[10*1024*1024];
int len;
for(int i=0;i<files.length;i++){
bis=new BufferedInputStream(Files.newInputStream(files[i].toPath()));
while ((len=bis.read(bytes)) !=-1){
bos.write(bytes,0,len);
bos.flush();
}
}
}catch (Exception e){
e.printStackTrace();
}
}
结果