Retroffit2의 MultipartPOST
잘못이 있으면 꼭 지적해 주세요.
하고 싶은 일
표제와 같다.
API에 이미지 같은 거 넣고 싶어요.
컨디션
메서드
1. 인터페이스 정의
@Body
모방RequestBoby
이 추가된 인터페이스를 정의하는 매개 변수에 포함됩니다.다음은
/post
에 던진 예다.api.java
@POST("/post")
Single<Response<StatusResponse>> createPost(@Body RequestBody images);
필요한 줄 알았는데@Multipart
필요 없어요.2. RequestBody의 생성
Okhttp3.RequestBody
에 존재하는 Builder
를 사용하여 생성합니다.PostService.java
MultipartBody.Builder builder = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("caption", intent.getStringExtra("caption"));
for (File file : files) {
builder.addFormDataPart("media", file.getName(),
// RequestBody.createが廃止されたので、file.toRequestBodyに修正
file.toRequestBody("image/jpg".toMediaTypeOrNull(), 0, file.size)
}
RequestBody body = builder.build();
2010/09/30RequestBody.create가 폐지되었기 때문에 파일입니다.toRequestBody로 수정되었습니다.
수정안을 받았습니다@mizukicker선생님, 감사합니다
-- 추기는 여기까지--
setType
Content-Type을 지정합니다.Content-Type은 다음과 같습니다.
등
RequestBody
에 다음 Type이 정의되어 있습니다.값
Content-Type
FORM
multipart/form-data
MIXED
multipart/mixed
ALTERNATIVE
multipart/alternative
DIGEST
multipart/digest
PARALLEL
multipart/parallel
내부는 각 값에 대응하는 문자열을
MediaType.parse()
에 전달합니다.이번에 상술한 것을 사용했다
FORM
.addFormDataPart
name과value를 매개 변수로 하는 것도 있고,name,fileName,body를 매개 변수로 하는 것도 있습니다.
문자열만 있는 경우
(name, value)
.이미지 또는 파일인 경우
(name, fileName, value)
.세 번째 매개변수에는 RequestBody가 필요합니다.
RequestBody.create()
등으로 하면 됩니다.3. 호출 실행
ViewModel 및 Repository 등에서 실제로 호출됩니다.
HogeRepository.java
//Maybe<T>を返す
return ApiClient.postApi.createPost(body)
.compose(DebugTransformer.withSingle("createNewPost"))
.doOnError(throwable -> {
Log.d("debug", "error: createNewPost");
throwable.printStackTrace();
})
.filter(response -> response.body() != null)
.map(response -> response.body().status);
Repository의 구현 사례는 다음과 같습니다.실제로 ViewModel 등을 통해 subscribe를 미리 진행하고 API 호출 결과를 사용하여 View를 반영합니다.
Reference
이 문제에 관하여(Retroffit2의 MultipartPOST), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/satsukies/items/822db4f68094dad4951d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)