diadia

興味があることをやってみる。自分のメモを残しておきます。

retrofitでmultipart通信 複数の画像を送信する

通常のultipart通信に何を変えれば良いか

変えるべきはインターフェースの関数の引数に画像部分を増やすこと。そしてMultipartBody.Partオブジェクトを贈りたい画像の枚数分生成すること。 これが一枚画像を送る場合と異なることだ。

Interface

    //Itemオブジェクトを生成する
    //認証ユーザーのみリクエスト送れる仕組みが必要
    //@Headers("Content-Type:application/json")
    @Multipart
    @POST("api/item_create_1/")
    fun postItemCreateAPIViewMultiPart(
        @Header("Authorization") authTokenHeader: String, 
        @Part file:MultipartBody.Part,
        @Part file:MultipartBody.Part,
        @Part file:MultipartBody.Part,
        @Part("testpart") requestBody: RequestBody
    ):Call<ResultModel>

MultipartBody.Partオブジェクトを生成

val file1 = File("file/path")
val file2 = File("file/path")
val file3 = File("file/path")

val reqBody1 = RequestBody.create(MediaType.parse("image/*"), file1)
val reqBody2 = RequestBody.create(MediaType.parse("image/*"), file2)
val reqBody3 = RequestBody.create(MediaType.parse("image/*"), file3) 

val multipartBody1 = MultipartBody.Part.createFormData("image1", file.name, reqBody1)
val multipartBody2 = MultipartBody.Part.createFormData("image2", file.name, reqBody2)
val multipartBody3 = MultipartBody.Part.createFormData("image3", file.name, reqBody3)

送信

Retrofit.create(Hoge::class.java).postItemCreateAPIViewMultiPart(authTokenHeader, multipartBody1, multipartBody2, multipartBody3, requestBody)