import java.util.Base64;
public class Base64Util {
// image/jpeg 중에 jpeg만 return
public static String getMimeType(String imgBase64){
int beginIndex = imgBase64.indexOf("/")+1;
int endIndex = imgBase64.indexOf(";");
String mimeType = imgBase64.substring(beginIndex, endIndex);
return mimeType;
}
public static String encodeAsString(byte[] imgBytes, String mimeType){
String imgBase64 = Base64.getEncoder().encodeToString(imgBytes);
imgBase64 = "data:$mimeType;base64,$imgBase64".replace("$mimeType", mimeType).replace("$imgBase64", imgBase64);
return imgBase64;
}
public static byte[] decodeAsBytes(String imgBase64){
// 1. mimetype parsing
String mimeType = getMimeType(imgBase64);
//System.out.println(mimeType);
// 2. img parsing
int prefixEndIndex = imgBase64.indexOf(",");
String img = imgBase64.substring(prefixEndIndex+1);
//System.out.println(img);
// 3. base64 decode to byte[]
byte[] imgBytes = Base64.getDecoder().decode(img);
return imgBytes;
}
}
Base64 유틸리티 함수입니다.
- 자바 프로젝트 생성
- FileReader 혹은 BufferedReader로 1.png 파일 읽기
- 읽은 byte[] 배열을 encodeAsString() 함수를 호출하여 문자열로 변환
- class Pic에 mimeType, filename, imgString 필드를 만들고, 거기에 저장하기
- 저장된 클래스에서 imgString에 저장된 base64 정보를 decodeAsByte() 함수를 호출해서 다시 byte[] 로 변환하기
파일은 하드디스크에 기록한다 무거우니까
클래스에 확장자를 담으니까 → 굳의 imgString에 있는 걸로 파싱해서 안해도 됨!
서버에게 던져지는 데이터는 imgString이고 서버는 이거 ㄹ디코딩해서 파일을 기록해가지구 저장어쩌구
원래는 바이트 배열을 보냈음
디코드는 서버측에 필요한 것! (서버에서는 인코딩할 일이 없다)
경로만 주면 됨?
Share article