retrofit multipart送信を行う
コンテンツ
- Multipart通信における知見
- 関連記事
- 参考
Multipart通信における知見
実装概要
実装ではInterfaceの設定とretrofitでinterfaceメソッド実行を行う。
Interfaceについて
//Itemオブジェクトを生成する //認証ユーザーのみリクエスト送れる仕組みが必要 //@Headers("Content-Type:application/json") @Multipart @POST("api/item_create_1/") fun postItemCreateAPIViewMultiPart( @Header("Authorization") authTokenHeader: String, @Part file:MultipartBody.Part, @Part("testpart") requestBody: RequestBody ):Call<ResultModel>
@Partには2つの使い方がある。 Partに付随するのはMultipartBody.Partであるか、RequestBodyであるかである。
テキストデータを送信する場合には、 RequestBodyオブジェクトを使う。 画像を送信する場合には、画像ファイルをラッピングしたMultipartBody.Partを使う。
RequestBodyオブジェクトを生成する
val reqBody :RequestBody = RequestBody.create(MediaType.parse("application/json"), itemObj.toString())
RequestBodyクラスについて
RequestBody (OkHttp 3.14.0 API)
RequestBodyクラスはOkHttp3のクラスである。
returns | method |
---|---|
static RequestBody | create(MediaType contentType, String content) |
static RequestBody | create(MediaType contentType, File file) |
RequestBodyにはstaticメソッドのcreateがある。 このメソッドの第1引数は MediaType オブジェクトである。 第2引数はいろいろ種類がある。 自分が使うものとして、FileオブジェクトとStirngオブジェクトがある。画像を送信したい場合には画像のFileオブジェクトを渡す。テキストデータの場合はStringオブジェクトを渡す。
このインスタンスは、テキストデータならこのまま送れるし、画像データならこれを核にしてMultipartBody.Partオブジェクトを生成する。
var strContent = "{ 'item' : {'id':3, 'title':'医学書', 'author':'ドクター'} }" val mediaType = MediaType.parse("application/json") val reqBody = RequestBody.create(mediaType, strContent)
MultipartBody.Partオブジェクトを生成する方法
MultipartBodyクラスはRequestBodyクラスのサブクラスである。
retruns | method |
---|---|
static MultipartBody.Part | createFormData(String name, String filename, RequestBody body) |
画像を送信するためにMultipartBody.PartのcreateFormData()メソッドを使う。
val filepath = "hoge" val imageFile = File(filePath) val mediaType = MediaType.parse("image/*") val reqBody = RequestBody.create(mediaType, imageFile) val part = MultipartBody.Part.createFormData("part_name", imageFile.name, reqBody)
memo
上記のインターフェースとオブジェクトを組み合わせてmultipart通信を実行する。
疑問点
関連記事
参考
Android Image Upload Example | Multipart Retrofit2
retrofitでマルチパートなものをPOSTする - tumblr
Upload file in Android Java with retrofit 2 - Vo Thanh Tung - Medium