안드로이드 retrofit2 를 이용한 multipart 적용방법


이번에 통신API 를 retrofit2로 교체하는 작업을 하고있습니다만

일반 텍스트파라미터를 통신하는작업은 잘되는데

이미지를 얹혀서 올리는작업에서 막혔습니다..

result가 자꾸 fail 되는데 어디가 문제인지 잘 모르겠습니다..

아래는 안드로이드 소스코드인데 혹시 어디가 잘못되어있거나 누락되어있는지 답변해주시면 감사하겠습니다ㅠ

==================================================================

    ..... ApiInterface.class

    @Multipart
    @POST(BaseVariable.URL_INSERT)
    Call<Results> postInsert(@PartMap Map<String, RequestBody> params);


    ..... MainActivity.class

    Map<String, RequestBody> map = new HashMap<>();
    map.put("user_id", toRequestBody("user_id")); // 유저아이디값(string)

    File file = new File(thumbnailFile.getPath()); // 이미지파일주소는 확인됨
    RequestBody fileBody = RequestBody.create(MediaType.parse("image/*"), file); 
    map.put("url_upload", fileBody);

    Call<Results> repos = MainApplication.getApiInterface().postInsert(map);
    repos.enqueue(new Callback<Results>() {
        @Override
        public void onResponse(Response<Results> response) {
        .....

조회수 190


1 답변


좋아요
2
싫어요
채택취소하기

아래에 깃헙 이슈를 보니 레트로핏 1.x와 다르게 @Part("file\"; filename=\"photo.png") RequestBody file와 같은 포맷으로 어노테이션이 추가되어야 하는 것 같습니다.

올려주신 코드처럼 Map을 사용하는 경우는 다음과 같이 처리하면 될 것 같습니다. (파일 이름인 photo.png는 임의로 지정했습니다.)

map.put("url_upload\"; filename=\"photo.png\"", fileBody);

또는 MultipartBody.Part를 사용하는 방법도 있는데, MultipartBody.Part는 애초에 생성 시 파일명을 필수로 넘기도록 되어있네요.


  • 해결되었어요~ 너무 감사합니다 ㅠㅠ     ssangyongttt   2016.10.19 10:09     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close