在 Java 中进行多个 MultipartFile 批量压缩有多种实现方式,下面我将介绍两种常见的方式:使用 Java 内置的 ZipOutputStream 和使用第三方库 Apache Commons Compress。
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.springframework.web.multipart.MultipartFile;
public class ZipUtil {
public static byte[] compressFilesToZip(MultipartFile[] files) throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try (ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream)) {
for (MultipartFile file : files) {
zipOutputStream.putNextEntry(new ZipEntry(file.getOriginalFilename()));
zipOutputStream.write(file.getBytes());
zipOutputStream.closeEntry();
}
}
return byteArrayOutputStream.toByteArray();
}
}
无需添加额外的依赖,Java 内置的类库。
import java.io.*;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.springframework.web.multipart.MultipartFile;
public class ZipUtil {
public static byte[] compressFilesToZip(MultipartFile[] files) throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try (ZipArchiveOutputStream zipOutputStream = new ZipArchiveOutputStream(byteArrayOutputStream)) {
for (MultipartFile file : files) {
ZipArchiveEntry entry = new ZipArchiveEntry(file.getOriginalFilename());
zipOutputStream.putArchiveEntry(entry);
zipOutputStream.write(file.getBytes());
zipOutputStream.closeArchiveEntry();
}
}
return byteArrayOutputStream.toByteArray();
}
}
Maven:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version>
</dependency>
Gradle:
implementation 'org.apache.commons:commons-compress:1.21'
这两种方法都能实现多个 MultipartFile 批量压缩的功能,具体选择哪种方式取决于你的项目需求和偏好。记得根据你的项目架构和版本需求,适当地调整依赖版本。