改造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)。
你有沒有一個你現在用什麼來添加單個圖像的例子? – kabuto178
只需在該方法中添加更多'@ Part'參數。你已經走上了正軌。 –
但是,如何將圖像從arrayList適配器動態添加到@Part。作爲@Part(「圖像」)ArrayList圖像不發佈文件。 –
mahsanq