Skip to content

Latest commit

 

History

History
53 lines (41 loc) · 1.4 KB

upload.mdx

File metadata and controls

53 lines (41 loc) · 1.4 KB
title
Uploading files

Apollo Kotlin supports file uploads via the GraphQL multipart request specification.

First, add the following custom scalar mapping to the Apollo Gradle plugin configuration:

apollo {
  service("service") {
    mapScalarToUpload("Upload")
  }
}

In this example, the GraphQL schema defines a custom scalar type named Upload. You can use a different name as needed for your schema.

Note: You don't need to register a type adapter for Upload, because the mapScalarToUpload method registers it automatically.

Now let's consider a mutation that takes an Upload as a parameter:

mutation SingleUpload($file: Upload!) {
  singleUpload(file: $file) {
    id
    path
    filename
    mimetype
  }
}

Create an instance of Upload using one of the factory methods:

// If you're on Android/JVM, you can turn a File into an upload
val upload = File.toUpload("application/json")

// On multiplatform, you can use `DefaultUpload`
val upload = DefaultUpload.Builder()
              .fileName("filename.txt")
              .content { sink ->
                okioSource.use { sink.writeAll(it) }
              }
              .build()

And execute your mutation:

val response = apolloClient.mutation(SingleUploadMutation(file = upload)).execute()