如何使用改造在同一参数上添加多个图像/文件以及其他文本数据?
Single image is uploading perfectly using following interface
@Multipart
@POST("/users/updateProfile/")
public void updateProfileWithImage(
@Part("user_id") TypedString first_name,
@Part ("image") TypedFile image,
Callback<WebResponse> callback);
答案 0 :(得分:12)
您可以将 @PartMap作为参数使用@MultiPart Post
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("/users/updateProfile/")
Response updateProfileWithImage(
@Part("user_id") TypedString first_name,
@PartMap Map<String,TypedFile> Files
);
}
答案 1 :(得分: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());
P.S。您可以使用
将自定义表单字段(例如client.name
)添加到同一表单中
requestBodyBuilder.addFormDataPart("client[name]", null, RequestBody.create(MediaType.parse("text/plain"), name))
或
requestBodyBuilder.addFormDataPart("client[name]", name))
改造1.9 :
您可以使用MultipartTypedOutput发布可变数量的多部分参数。
除了François的回答,要在改造中使用相同/重复字段名称(作为数组)发布多个图像,您可以使用 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);
方括号
请注意,某些服务器端框架(Rails)通常需要使用方括号(即extraImage[]
而不是extraImage
),其他则不需要(Spring MVC)。