Android(Java) - Retrofit - Multipart 사용 방법, 파일 업로드하기

반응형

 

Mutipart 사용 방법

  • MultipartBody.part : 데이터를 여러개로 쪼개어 전송하는 것
  • createFormData : 주로 파일 전송을 위해 사용
    • POST에서만 사용 가능
  • RequestBody : GET을 제외한 메소드는 바디를 사용하기 때문에 요청을 위한 Body 설정
    • 파라미터(보낼 데이터, 데이터의 파일 타입) : 데이터가 텍스트인지, 이미지인지, xml 파일인지 등등을 구분
      • 예시) RequestBody fileBody = RequestBody.create(photoFile, MediaType.parse("image/jpeg"))
      • photoFile은 이미지 파일, MediaType.parse는 이미지 파일의 확장자를 의미
    • 텍스트로만 구성된 경우 text/plain 을 사용
      • 예시) RequestBody contentBody = RequestBody.create(content, MediaType.parse("text/plain"))

Multipart로 API 요청하기

POSTMAN 프로그램을 통한 API 서버와의 POST 통신

POST

  • 파라미터에 바디(Body)를 사용
    • 주의! 요청과 응답도 모두 바디로 사용하므로 혼동하면 안된다!!! (내가 그랬음)
  • 사용자가 서버에 데이터를 추가하거나 정보를 입력 할 때 사용 (회원가입, 글쓰기 등)
  • 예시 API서버에서의 GET 메소드 필수 파라미터
    • Header : 인증키(Authorization)
    • Body : photo(이미지 파일), content(내용)

POST 요청, 이미지를 업로드

  • SnsApi.java
// 포스팅 추가 API
// POST는 Body 사용
@Multipart
@POST("/posting")
Call<PostRes> addPosting(@Header("Authorization") String token,
                         @Part MultipartBody.Part photo,
                         @Part("content")RequestBody content);

  • AddSnsActivity.java (실행되는 액티비티 이름)
// 네트워크로 데이터 전송, Retrofit 객체 생성
Retrofit retrofit = NetworkClient.getRetrofitClient(AddSnsActivity.this);
SnsApi api = retrofit.create(SnsApi.class);

// 멀티파트로 파일을 보내는 경우 파라미터 생성 방법, (파일명, 파일 타입)
RequestBody fileBody = RequestBody.create(photoFile, MediaType.parse("image/*"));

MultipartBody.Part photo = MultipartBody.Part.createFormData("photo", photoFile.getName(), fileBody);

// 멀티파트를 텍스트로 보내는 경우 파라미터 보내는 방법 ( 내용, 텍스트 타입)
RequestBody contentBody = RequestBody.create(content, MediaType.parse("text/plain"));
반응형