Base64 이미지를 날짜별 폴더에 저장하는 Java 예제

Base64는 이미지 업로드, 프론트 백엔드 통신, 파일 임베드를 할 때 필수적인 기술이다.

오늘 정리한 코드를 활용하면 java로 쉽게 base64 이미지를 내가 원하는 폴더에 저장할 수 있다.

 

Base64란?

base64는 이진 데이터를 텍스트로 바꾸는 인코딩 방식이다.

네트워크나 텍스트 기반 시스템(json,xml) 등에서는 순수 이진 데이터 전송이 어려운데 base64는 이진 데이터를 문자열 형태로 안전하게 변환해 준다.

단점으로는 원래 크기보다 약 33프로 정도 데이터 크기가 증가하며 바이너리 처리보다 성능은 떨어지는 편이다.

 

data:image/png;base64,iVBORw0KGgoAAAANRTYDDA...

image/png;base64, 는 메타정보는 의미하며 콤마 뒤에 값은 인코딩 된 이미지 데이터를 의미한다.

 

 

Java 코드: Base64 문자열을 이미지 파일로 저장하기

import java.io.*;
import java.nio.file.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Base64;

public class ImageSaver {

    public static String saveBase64ImageFile(String base64String) throws IOException {
       
        String midId = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));

        String extension = "jpg"; 
        String base64Data = base64String;

        if (base64String.startsWith("data:")) {
            int slashIndex = base64String.indexOf('/');
            int semicolonIndex = base64String.indexOf(';');
            if (slashIndex != -1 && semicolonIndex != -1) {
                extension = base64String.substring(slashIndex + 1, semicolonIndex);
            }
            base64Data = base64String.substring(base64String.indexOf(",") + 1);
        }

        String year = midId.substring(0, 4);
        String month = midId.substring(4, 6);
        String day = midId.substring(6, 8);

        String dirPath = "resource/media/image/" + year + "/" + month + "/" + day;
        Files.createDirectories(Paths.get(dirPath)); 

        String fileName = midId + "." + extension;
        String fullPath = dirPath + "/" + fileName;

        byte[] imageBytes = Base64.getDecoder().decode(base64Data);
        try (OutputStream out = new FileOutputStream(fullPath)) {
            out.write(imageBytes);
            System.out.println("이미지 저장 완료: " + fullPath);
        }

        // 저장된 전체 경로 리턴
        return fullPath;
    }
}

 

String midId = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); 

현재 시간을 기반으로 파일명이 되는 Id를 생성한다.

 

if (slash != -1 && semi != -1) {
      extension = base64String.substring(slash + 1, semi);
}base64Data = base64String.substring(base64String.indexOf(",") + 1);

메타정보에서 확장자와 순수 이미지 데이터를 추출한다.

 

String dirPath = "/media/image/" + year + "/" + month + "/" + day;

Files.createDirectories(Paths.get(dirPath)); 

생성된 id로 년/월/일 날짜 경로를 만든 후 폴더를 생성한다.

 

byte[] imageBytes = Base64.getDecoder().decode(base64Data);

OutputStream out = new FileOutputStream(fullPath)
out.write(imageBytes);
디코딩 후 이미지를 해당 경로에 저장한다.

 

사용 예시

String savedPath = ImageSaver.saveImageFileAndReturnPath(
    "data:image/png;base64,iVBORw0KGgoAAAANRTYDDA..."
);
System.out.println("저장된 경로: " + savedPath);