2016-06-13 2 views
-1

json과 함께 이미지 파일을 업로드하려면 어떻게해야합니까?JSON에서 다중 이미지 데이터를 어떻게 android에 갱신 2로 업로드 하시겠습니까?

내 요청 JSON은 아래 형식을 사용합니다. 내가 어떤 것을이

public class Request implements Serializable { 
    @SerializedName("first_name") 
    private String firstName; 
    @SerializedName("last_name") 
    private String lastName; 
    @SerializedName("profile_image_attributes") 
    private MultipartBody.Part profileImageAttributes; 
} 

@Headers("Content-Type:application/json") 
@POST(PSDApiconstants.REGISTRATION) 
Observable<PSDSignUpResponseBean> registration(@Body PSDRegistrationRequestBean requestBean); 

같은 값을 입력하고 내 GSON 클래스에서

{ 
    "Request": { 
     "first_name": "Josmy", 
     "last_name": "J", 
     "profile_image_attributes": { 
      "image":"file" 
     } 
    } 
} 

{ 
     "imag": "File", 
     "first_name": "Josmy", 
     "last_name": "J", 
    } 

편집에 요청을 변경하지 않고 어떤 방법이

현재 2.0 버전을 개조한다고 생각합니다. .1이 패턴으로 이미지 업로드를 지원하지 않습니다. 그래서 나는이 문제를 해결하기 위해 Asynchttp를 사용한다. 그러나 개조 될 수 있습니다 2 최신 버전에 7 월 말까지 포함됩니다

+0

1) "멀티 파트 파일"은 무엇이라고합니까? 2) JSON 내부에는 멀티 파트와 같은 것이 없습니다. 3) JSON 안에 이미지를 넣으려면 Base64로 인코딩해야합니다. 4) 위의 '이미지'와 같은 하나의 키 아래에 더 많은 것을 넣으려면이 Base64로 인코딩 된 이미지를 원하는 분리 기호로 구분해야합니다. '***'. 5) 어떤 경우 든 서버가 형식을 지정하므로 질문이 적절하지 않습니다. 서버가 기대하는 것을 전송하십시오. –

+0

@EugenPechanec베이스 64가 아닌 멀티 파트 이미지로 전달해야합니다. 가능합니까? – Nivedh

+0

다시 말하지만 "다중 이미지"는 무엇입니까? "multipart JSON", "multipart file", "multipart image", "multipart whatever"와 같은 것은 없습니다. ** HTTP POST 본문은 멀티 파트 ** 일 수 있습니다.이 경우 JSON SEPARATOR IMAGE1 SEPARATOR IMAGE2 SEPARATOR IMAGE 등을 보내십시오. HTTP POST 본문은 JSON 만 가능하며 이미지는 해당 JSON 내에 Base64로 인코딩 될 수 있습니다. ** 그 사이에는 아무 것도 없습니다. ** API의 클라이언트로서 당신은 이것에 대해 아무 말도하지 않습니다. API 개발자에게 API의 형식이 무엇인지 물어보십시오. 정말 여러 부분입니까? JSON 요청의 형식은 무엇이며 멀티 파트 구분 기호 (경계)는 무엇입니까? –

답변

3

개장 2.0에서는 MultipartBody.Part를 사용하여 이미지를 업로드 할 수 있습니다.

는 서비스 선언

@Multipart 
@POST("/api/imageupload") 
Observable<Response> uploadImage(@Part MultipartBody.Part imageFile); 

당신의 개조 클라이언트 개체를 만들고 API를 호출합니다.

Retrofit retrofit = new Retrofit.Builder() 
     .baseUrl(YOUR_API_URL) 
     .addConverterFactory(GsonConverterFactory.create()) 
     .build(); 

//prepare image file 
File file = new File(imagePath); 
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); 
MultipartBody.Part imageFileBody = MultipartBody.Part.createFormData("image", file.getName(), requestBody); 

YourAPI service = retrofit.create(YourAPI.class); 
Call<Response> call = service.uploadImage(imageFileBody); 
call.enqueue(new Callback<Response>() { 
    @Override 
    public void onResponse(Call<Response> call, Response<Response> response) { 
     //handle success 
    } 

    @Override 
    public void onFailure(Call<User> call, Throwable t) { 
     //handle error 
    } 
} 
+0

고맙습니다.하지만 제 질문은이 다중 파일을 json으로 전달해야한다는 것입니다. 하지만 그 Gson 개체로 MultipartBody.Part를 전달하면 작동하지 않습니다. json에 표시된 것처럼 – Nivedh

+0

나는 귀하의 질문을 실제로 이해하지 못합니다. 객체를 json으로 보내려면 객체를 json 문자열로 serialize하여 가능할 것입니다. – ikhsan

+0

위의 json 형식의 "profile_image_attributes"태그 안에이 Multipart 객체를 전달해야합니다. – Nivedh