[kotlin] 코틀린 웹 서버에서 파일 업로드 구현하기

코틀린은 간편하고 효율적인 웹 서버 개발을 위한 언어입니다. 이번 포스트에서는 코틀린 웹 서버에서 파일 업로드를 구현하는 방법에 대해 알아보겠습니다.

구현 단계

  1. 코틀린으로 웹 서버를 생성합니다. 이를 위해 Ktor 프레임워크를 사용하겠습니다. Ktor는 경량화된 웹 프레임워크로, 코틀린의 장점을 최대한 활용할 수 있습니다.

  2. POST 요청을 처리하기 위한 라우팅 경로를 설정합니다. 파일을 업로드할 API 엔드포인트를 생성합니다.

  3. 클라이언트 요청에서 파일 데이터를 추출하여 파일 시스템에 저장합니다. Ktor는 파일 업로드를 간편하게 처리할 수 있는 멀티파트(form-data)를 제공합니다.

  4. 파일 업로드가 완료되면 클라이언트에게 응답을 전송합니다.

예제 코드

import io.ktor.application.*
import io.ktor.features.ContentTransformationException
import io.ktor.features.ContentTransformationException.Type.InvalidContentType
import io.ktor.features.MultiPart
import io.ktor.http.content.PartData
import io.ktor.http.content.forEachPart
import io.ktor.http.content.streamProvider
import io.ktor.request.receiveMultipart
import io.ktor.response.respond
import io.ktor.routing.post
import io.ktor.routing.routing
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
import java.io.File

fun main() {
    embeddedServer(Netty, port = 8080) {
        routing {
            post("/upload") {
                val multipart = call.receiveMultipart()
                multipart.forEachPart { part ->
                    if (part is PartData.FileItem) {
                        val filename = part.originalFileName ?: return@forEachPart
                        val file = File("/path/to/storage/$filename")
                        part.content.streamProvider().use { input ->
                            file.outputStream().buffered().use { output ->
                                input.copyTo(output)
                            }
                        }
                    }
                    part.dispose()
                }
                call.respond("File uploaded successfully")
            }
        }
    }.start(wait = true)
}

위의 예제 코드는 Ktor 프레임워크를 사용하여 코틀린 웹 서버를 생성하고, 파일 업로드를 처리하는 예제입니다. 클라이언트가 POST /upload 엔드포인트로 파일을 업로드하면, 서버는 파일 데이터를 추출하여 지정된 경로에 저장하고, 성공 응답을 반환합니다.

참고 자료