需要帮助POST多个图像文件使用改造?

mah*_*anq 13 android retrofit

如何使用改造在同一参数上添加多个图像/文件以及其他文本数据?

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);
Run Code Online (Sandbox Code Playgroud)

Fra*_*ois 12

您可以将@MultiPart Post与@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("/users/updateProfile/")
    Response updateProfileWithImage(
     @Part("user_id") TypedString first_name,
     @PartMap Map<String,TypedFile> Files
    );

}
Run Code Online (Sandbox Code Playgroud)


Bor*_*hov 11

改造2.0 + OkHttp 3

接口声明:

@POST("postpath")
Call<Void> upload(@Body MultipartBody filePart);
Run Code Online (Sandbox Code Playgroud)

创建MultiPartBody:

MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder()
                    .setType(MultipartBody.FORM);
Run Code Online (Sandbox Code Playgroud)

然后为每个文件(您还可以添加自定义字段)

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

最后

api.upload(requestBodyBuilder.build());
Run Code Online (Sandbox Code Playgroud)

PS你可以将自定义表单字段(例如client.name)添加到同一表单中

requestBodyBuilder.addFormDataPart("client[name]", null, RequestBody.create(MediaType.parse("text/plain"), name))
Run Code Online (Sandbox Code Playgroud)

要么

requestBodyBuilder.addFormDataPart("client[name]", name)) 
Run Code Online (Sandbox Code Playgroud)

改造1.9:

您可以使用MultipartTypedOutput发布可变数量的多部分参数.

除了François的回答,要在改造中发布具有相同/重复字段名称(作为数组)的多个图像,您可以使用MultipartTypedOutput

方法签名:

@POST("/postpath")
SomeResponse upload(@Body MultipartTypedOutput output);
Run Code Online (Sandbox Code Playgroud)

用法:

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);
Run Code Online (Sandbox Code Playgroud)

方括号

请注意,某些服务器端框架(Rails)通常需要方括号(即extraImage[]代替extraImage),而其他框架(Spring MVC)则不需要.