2016-06-13 35 views
-1

我如何上傳圖像文件以及我的json。如何在android中使用retrofit 2上傳JSON中的多部分圖像數據?

我的請求JSON看起來在下面的格式。

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

在我GSON類我正在輸入值一些什麼樣的這個

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); 

有不改變要求

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

編輯任何方式

目前我認爲改進2.0 .1不支持以這種模式上傳圖片。所以我使用Asynchttp來解決這個問題。但可能會進行改進2將在7月底發佈最新版本

+0

1)你叫什麼「多部分文件」? 2)JSON中沒有多部分的東西。 3)如果你想在JSON中放置一個圖像,你需要在Base64中編碼。 4)如果你想在上面的'image'這樣的一個按鍵下面放置更多的圖像,你將不得不通過你選擇的分隔符來分隔這些Base64編碼圖像。 ''***。 5)無論如何,服務器決定格式,所以你的問題沒有多大意義。發送服務器期望的內容。 –

+0

@EugenPechanec我需要通過多部分圖像,而不是基地64.這可能嗎? – Nivedh

+0

再次,什麼是「多部分圖像」?沒有「multipart JSON」,「multipart file」,「multipart image」,「multipart whatever」之類的東西。 ** HTTP POST正文可以是多部分**,在這種情況下,您可以發送JSON SEPARATOR IMAGE1 SEPARATOR IMAGE2 SEPARATOR IMAGEn等。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

Thankyou,但我的問題是,我必須在json中傳遞這個多部分文件。但它不工作,如果我將MultipartBody.Part作爲Gson對象傳遞。如json所示。 – Nivedh

+0

我其實不瞭解你的問題。如果你想發送你的對象作爲JSON,可以通過序列化你的對象到JSON字符串。 – ikhsan

+0

我需要在上面的json格式的標籤「profile_image_attributes」中傳遞這個Multipart對象。 – Nivedh

相關問題