파일을 바이너리 데이터로 변경 및 전송
서버에 있는 파일을 외부 api에 전달하기 위해..
서버에 파일을 불러와 바이너리로 변경, 인코딩 후 파라미터에 담아 전송.
import java.io.File;
import java.nio.file.Files;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
...
public String encodeFile(String fileUrl, String fileName) throws IOException {
File file = new File(fileUrl);
byte[] bytes = Files.readAllBytes(file.toPath());
String baseEncodeStr = Base64.getEncoder().encodeToString(bytes);
String urlEncodeStr = URLEncoder.encode(baseEncodeStr, StandardCharsets.UTF_8.toString());
String result = urlEncodeStr.replace("+", "%20");
/*
* bytes: 파일객체 byte[] 생성
* baseEncodeStr : Base64 인코딩
* urlEncodeStr: URLEncoder 인코딩
* result: 외부 api에 전송시 "+"가 공백으로 치환돼 디코딩시 오류 발생.
* "%20"문자로 치환해줘야 수신측에서 정상적으로 받을 수 있음.
*/
return result;
}
수신측에서는 URLDecoder 디코딩 > Base64 디코딩 후 사용해야합니다.