Multipart send from retrofit2


1. ApiService


interface ApiService {

    @Multipart

    @POST("your_upload_url")

    fun uploadMultipleFiles(

            @Part file1: MultipartBody.Part?,

            @Part file2: MultipartBody.Part?,

            @Part file3: MultipartBody.Part?,

            @Part file4: MultipartBody.Part?)

            : Call<FileUploadResult>

}


2. ApiFactory (result xml parsing)

fun createXmlForImageUpload(): SLApiService {

        val interceptor = HttpLoggingInterceptor()

        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY)

        val client:OkHttpClient  = OkHttpClient.Builder()

                .connectTimeout(180,TimeUnit.SECONDS) //timeout setting

                .readTimeout(180,TimeUnit.SECONDS) //timeout setting

                .writeTimeout(180,TimeUnit.SECONDS) //timeout setting

                .addInterceptor(interceptor).build() // log interceptor

        val retrofit = Retrofit.Builder()

                .baseUrl("your api base url")

                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())

                .addConverterFactory(SimpleXmlConverterFactory.create()) // xml parsing factory

                .client(client)

                .build()

        return retrofit.create(ApiService::class.java)

    } 


3. used Api


private fun uploadImage() {

        val apiService = SLApiFactory.createXmlForImageUpload()

        var image1:MultipartBody.Part? = null

        var image2:MultipartBody.Part? = null

        var image3:MultipartBody.Part? = null

        var image4:MultipartBody.Part? = null


        if (SelectImageData.mGridItemList.size > 0) {

            image1 = prepareFilePart("image1",EditorUtil.makeMiniPath(SelectImageData.mGridItemList.get(0),this@SendImageActivity))

        }

        if (SelectImageData.mGridItemList.size > 1) {

            image2 = prepareFilePart("image2",EditorUtil.makeMiniPath(SelectImageData.mGridItemList.get(1),this@SendImageActivity))

        }


        if (SelectImageData.mGridItemList.size > 2) {

            image3 = prepareFilePart("image3",EditorUtil.makeMiniPath(SelectImageData.mGridItemList.get(2),this@SendImageActivity))

        }


        if (SelectImageData.mGridItemList.size > 3) {

            image4 = prepareFilePart("image4",EditorUtil.makeMiniPath(SelectImageData.mGridItemList.get(3),this@SendImageActivity))

        }


        apiService.uploadMultipleFiles(image1,image2,image3,image4).enqueue(object:Callback<FileUploadResult>{

            override fun onFailure(call: Call<FileUploadResult>?, t: Throwable?) {

                

            }


            override fun onResponse(call: Call<FileUploadResult>?, response: Response<FileUploadResult>?) {

                

            }

        })

    } 


+ Recent posts