Need help in POST multiple image file using retrofit?

前端 未结 2 1732
-上瘾入骨i
-上瘾入骨i 2020-12-05 08:33

How to add multiple images/files on a same parameter along with other textual data using retrofit?

Single image is uploading perfectly using following interf         


        
2条回答
  •  一个人的身影
    2020-12-05 09:03

    Retrofit 2.0 + OkHttp 3

    Interface declaration:

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

    Creating MultiPartBody:

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

    then for each file(you can also add custom fields)

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

    and finally

    api.upload(requestBodyBuilder.build());
    

    P.S. you can add custom form fields (for example client.name) to the same form with

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

    or

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

    Retrofit 1.9:

    You can use MultipartTypedOutput to post variable number of multi-part parameters.

    In addition to François' answer, to post multiple images with the same / repeating field name(as an array) in retrofit you can use MultipartTypedOutput

    Method signature:

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

    Usage:

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

    Square brackets

    Please note that some server side frameworks(Rails) typically require square brackets(i.e. extraImage[] instead of extraImage), others don't (Spring MVC).

提交回复
热议问题