웹 서비스에서 다수의 이미지를 업로드할 때, 사용자가 ZIP 파일로 묶어서 전송하는 경우가 많습니다.
이 글에서는 Spring 환경에서 업로드된 ZIP 파일을 해제하고, 특정 확장자(.jpg, .tif, .tiff)만 추출하는 방법을 소개합니다.
MultipartFile로 ZIP 파일이 서버에 전달됨import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public void extractImagesFromZip(MultipartFile multipartFile) throws IOException {
String originalName = multipartFile.getOriginalFilename();
// ZIP 파일인지 확인
if (originalName != null && originalName.toLowerCase().endsWith(".zip")) {
try (ZipInputStream zis = new ZipInputStream(multipartFile.getInputStream())) {
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
if (!entry.isDirectory()) {
String entryName = entry.getName();
System.out.println("ZIP 내부 파일 경로: " + entryName);
// 폴더 경로 제거 → 순수 파일명 추출
String fileNameOnly = entryName.substring(entryName.lastIndexOf('/') + 1);
String lowerName = fileNameOnly.toLowerCase();
// JPG, TIF, TIFF 파일만 추출
if (lowerName.endsWith(".jpg") || lowerName.endsWith(".tif") || lowerName.endsWith(".tiff")) {
byte[] fileBytes = zis.readAllBytes();
// TODO: 여기서 fileBytes를 저장하거나 처리하는 코드 작성
System.out.println("추출된 파일명: " + fileNameOnly + ", 크기: " + fileBytes.length + " bytes");
}
}
zis.closeEntry();
}
}
}
}
.zip인지 체크 후 처리.ZipInputStream 사용entry.getName()은 폴더명/파일명 형태일 수 있음.lastIndexOf('/')를 이용해 파일명만 추출..jpg, .tif, .tiff만 추출.zis.readAllBytes()를 통해 메모리로 로드, 이후 저장/가공 가능.✅ 이 방법을 사용하면 웹에서 업로드된 ZIP 파일을 간단히 해제하고 원하는 형식만 골라 처리할 수 있습니다.