2014-03-26 41 views
13

如何使用改造將多個圖像/文件與其他文本數據一起添加到同一個參數中?需要幫助在POST多個圖像文件使用改造?

Single image is uploading perfectly using following interface 
    @Multipart 
    @POST("https://stackoverflow.com/users/updateProfile/") 
    public void updateProfileWithImage(
        @Part("user_id") TypedString first_name, 
        @Part ("image") TypedFile image, 
        Callback<WebResponse> callback); 
+0

你有沒有一個你現在用什麼來添加單個圖像的例子? – kabuto178

+0

只需在該方法中添加更多'@ Part'參數。你已經走上了正軌。 –

+3

但是,如何將圖像從arrayList適配器動態添加到@Part。作爲@Part(「圖像」)ArrayList 圖像不發佈文件。 – mahsanq

回答

12

您可以使用@MultiPart郵政與@PartMap作爲參數

Map<String, TypedFile> files = new HashMap<String, TypedFile>(); 
files.put("my file number one", new TypedFile("image/jpg", new File(filename))); 
files.put("my file number two", new TypedFile("image/jpg", new File(filename))); 

apiInterface.updateProfileWithImage("first name here", files); 

private interface ApiInterface{ 
    @Multipart 
    @POST("https://stackoverflow.com/users/updateProfile/") 
    Response updateProfileWithImage(
    @Part("user_id") TypedString first_name, 
    @PartMap Map<String,TypedFile> Files 
    ); 

} 
+1

在twitter中,我們需要指定相同的文件名, 'files.put(「media []」,file); files.put(「media []」,file);' 因此,這裏出現了不上載多個文件的問題。 @Francois對此有何解決方案? –

+1

@YashSodha你找到了解決方案嗎? –

+0

@BorisTreukhov nope,而不是我不得不與不同的圖片推出多個鳴叫 –

11

改造2.0 + OkHttp 3

接口聲明:

@POST("postpath") 
Call<Void> upload(@Body MultipartBody filePart); 

創建MultiPartBody

MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder() 
        .setType(MultipartBody.FORM); 

然後爲每個文件(你也可以添加自定義字段)

requestBodyBuilder.addFormDataPart("extraImage[]", "photo.jpg", 
          RequestBody.create(MediaType.parse("image/jpeg"), byteArrayOrFile)); 

最後

api.upload(requestBodyBuilder.build()); 

附:你可以添加自定義表單字段(例如client.name),以同樣的形式

requestBodyBuilder.addFormDataPart("client[name]", null, RequestBody.create(MediaType.parse("text/plain"), name)) 

requestBodyBuilder.addFormDataPart("client[name]", name)) 

改造1.9

您可以使用MultipartTypedOutput後可變數量的多部分參數。

除了弗朗索瓦的回答,張貼多個圖像與同一/在改型重複字段名稱(作爲一個陣列),可以使用MultipartTypedOutput

方法簽名:

@POST("/postpath") 
SomeResponse upload(@Body MultipartTypedOutput output); 

用法:

MultipartTypedOutput multipartTypedOutput = new MultipartTypedOutput(); 
multipartTypedOutput.addPart("mainImage", new TypedFile("image/jpeg", mainImage)); 
multipartTypedOutput.addPart("extraImage[]", new TypedFile("image/jpeg", file1)); 
multipartTypedOutput.addPart("extraImage[]", new TypedFile("image/jpeg", file2)); 
upload(multipartTypedOutput); 

S quare brackets

請注意,某些服務器端框架(Rails)通常需要方括號(即, extraImage[]而不是extraImage),其他人不會(Spring MVC)。

+1

我必須使用@Multipart上面的POST來使用此? –

+1

@SudhanshuGaur在使用'@ Body MultipartTypedOutput'參數的情況下,** NO **。 –