KotlinのAPI通信でファイルアップロードを実装する方法!初心者でもわかるネットワーク連携の基本
生徒
「Kotlinで写真やPDFなどのファイルをサーバーに送るには、どうすればいいんですか?」
先生
「ファイルを送るときは、API通信の中でも“ファイルアップロード”という方法を使うんだよ。KotlinとOkHttpを使えば簡単に実装できるよ。」
生徒
「画像をアップロードするアプリって多いですよね!仕組みがわかれば自分でも作れそうです。」
先生
「そうだね。今回は、ファイルアップロードの基本をKotlinで一緒に学んでいこう!」
1. API通信でファイルを送るとは?
ファイルアップロードとは、スマートフォンやパソコンの中にある画像やドキュメントなどのファイルを、インターネット経由でサーバーに送る仕組みのことです。
これにはmultipart/form-dataという形式を使って、データを複数のパーツに分けて送信します。
2. Kotlinで使うライブラリの準備
今回使うのは、OkHttpという通信ライブラリです。Kotlinと相性が良く、多くのアプリで使われています。
まずはGradleの設定ファイルに次のコードを追加しましょう:
dependencies {
implementation("com.squareup.okhttp3:okhttp:4.12.0")
}
3. ファイルアップロードの基本コード
では、実際にKotlinでファイルアップロードを行う基本コードを見てみましょう。今回はローカルにあるテキストファイルを例にします。
import okhttp3.*
import java.io.File
fun main() {
val client = OkHttpClient()
val file = File("sample.txt")
val mediaType = "text/plain".toMediaTypeOrNull()
val requestBody = file.asRequestBody(mediaType)
val multipartBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.name, requestBody)
.build()
val request = Request.Builder()
.url("https://example.com/upload")
.post(multipartBody)
.build()
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
}
MultipartBodyを使って、ファイルをmultipart/form-data形式でリクエストに含めています。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
4. 実行結果のイメージ
サーバー側が正しく受け取れば、次のようなJSONレスポンスが返ってくることがあります。
{
"status": "success",
"message": "ファイルを受け取りました"
}
5. ファイルの種類に応じたMIMEタイプとは?
アップロードするファイルの種類によって、MIMEタイプという値を設定します。これはファイルの種類を表す目印です。
- 画像(JPEG) →
image/jpeg - 画像(PNG) →
image/png - PDF →
application/pdf - テキスト →
text/plain
この設定が間違っていると、サーバー側で処理できないことがあるので注意しましょう。
6. エラーハンドリングも忘れずに
ファイルアップロード中に、インターネットが切れたり、サーバーが応答しなかったりすることがあります。そういうときはtry-catchでエラーを安全に処理しましょう。
try {
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
} catch (e: Exception) {
println("エラーが発生しました: ${e.message}")
}
7. 複数のファイルを同時にアップロードしたい場合は?
画像を複数選んで一気にアップロードしたいというケースもよくあります。そのときはaddFormDataPartを複数回使えばOKです。
val multipartBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file1", file1.name, file1.asRequestBody("image/jpeg".toMediaType()))
.addFormDataPart("file2", file2.name, file2.asRequestBody("image/jpeg".toMediaType()))
.build()
このように複数のfileをパーツとして追加することで、同時に送信できます。
8. Kotlinでファイルアップロードが使われる場面
KotlinでファイルをAPI経由でアップロードする技術は、以下のような場面で使われます:
- プロフィール画像のアップロード
- チャットアプリで画像やPDFを送信
- お問い合わせフォームで書類提出
どれも実用的なシーンばかりなので、しっかり理解しておきたいですね。