본문 바로가기

IT/Android

[Android] Retrofit 2.0 Multipart Post 전송

프로젝트에 Retrofit 2.0을 이용하여 개발하던 중, Multipart로 사진 파일을 서버로 전송해야 하는 상황이 있었다.


이 때, 여러 삽질을 통해 Multipart에 대해서 길진 않지만 정리하고자 한다.


아래와 같이 EndPoint를 @Multipart 어노테이션을 이용하여 정의한다.

(여기까지는 Retrofit Docs를 읽으면 알 수 있다....)

1
2
3
4
@Multipart
@POST("업로드 서버 주소")
Observable<CommonApiResponse> uploadPhoto(
        @Part MultipartBody.Part file );
cs


하지만 @Part에 해당하는 정보가 무엇이 들어가야 하는지에 대한 설명은 어디에도 나와있지 않았다... (고로 나도 설명하지 않으려...농담이다...)


MultipartBody.Part 클래스를 이용하여 FormData를 만들 수 있다. (아래처럼)


여기서 파일과 같은 정본느 RequestBody를 이용하여 Body를 구성할 수 있다. (한국어인지.... 번역체인지...)


1
2
3
MultipartBody.Part.createFormData("file", file.getPath(), RequestBody.create(MediaType.parse("image/jpeg"), file));
 
MultipartBody.Part.createFormData("file", Urls.encode(fileName));
cs



위의 조합을 잘 이용하면, Multipart Post 전송을 할 수 있다.


추가로 Mulipart 인코딩관련 어노테이션 처리를 할 필요가 없다. MultiPartBody나 RequestBody에서 알아서 인코딩을 해준다.


Retrofit의 레퍼런스가 정리가 잘되어 있으면 좋겠지만, 정리가 되지 않아 일일히 Retrofit의 JavaDocs를 찾아가며 삽질한 결과 알아낼 수 있었다....ㅠㅠ