안드로이드 retrofit2 를 이용한 multipart 적용방법
조회수 9975회
이번에 통신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) {
.....
1 답변
-
아래에 깃헙 이슈를 보니 레트로핏 1.x와 다르게
@Part("file\"; filename=\"photo.png") RequestBody file
와 같은 포맷으로 어노테이션이 추가되어야 하는 것 같습니다.올려주신 코드처럼 Map을 사용하는 경우는 다음과 같이 처리하면 될 것 같습니다. (파일 이름인 photo.png는 임의로 지정했습니다.)
map.put("url_upload\"; filename=\"photo.png\"", fileBody);
또는 MultipartBody.Part를 사용하는 방법도 있는데, MultipartBody.Part는 애초에 생성 시 파일명을 필수로 넘기도록 되어있네요.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력