File Upload
An example showcasing the documentation of file upload routes and multipart bodies.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 | package io.github.smiley4.ktoropenapi.examples
import io.github.smiley4.ktoropenapi.OpenApi
import io.github.smiley4.ktoropenapi.config.SchemaGenerator
import io.github.smiley4.ktoropenapi.post
import io.github.smiley4.ktoropenapi.openApi
import io.github.smiley4.ktorredoc.redoc
import io.github.smiley4.ktorswaggerui.swaggerUI
import io.ktor.http.ContentType
import io.ktor.http.HttpStatusCode
import io.ktor.server.application.Application
import io.ktor.server.application.install
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
import io.ktor.server.response.respond
import io.ktor.server.routing.route
import io.ktor.server.routing.routing
import java.io.File
fun main() {
embeddedServer(Netty, port = 8080, host = "localhost", module = Application::myModule).start(wait = true)
}
private fun Application.myModule() {
// Install the OpenAPI plugin and use the default configuration
install(OpenApi) {
schemas {
// overwrite type "File" with custom schema for binary data
generator = SchemaGenerator.reflection {
overwrite(SchemaGenerator.TypeOverwrites.File())
}
}
}
routing {
// add the routes for the OpenAPI spec, Swagger UI and ReDoc
route("swagger") {
swaggerUI("/api.json")
}
route("api.json") {
openApi()
}
route("redoc") {
redoc("/api.json")
}
// upload a single file, either as png, jpeg or svg
post("single", {
request {
body<File> {
mediaTypes(
ContentType.Image.PNG,
ContentType.Image.JPEG,
ContentType.Image.SVG,
)
}
}
}) {
call.respond(HttpStatusCode.NotImplemented, "...")
}
// upload multiple files
post("multipart", {
request {
multipartBody {
mediaTypes(ContentType.MultiPart.FormData)
part<File>("first-image") {
mediaTypes(
ContentType.Image.PNG,
ContentType.Image.JPEG,
ContentType.Image.SVG
)
}
part<File>("second-image") {
mediaTypes(
ContentType.Image.PNG,
ContentType.Image.JPEG,
ContentType.Image.SVG
)
}
}
}
}) {
call.respond(HttpStatusCode.NotImplemented, "...")
}
}
}
|