Docs
Launch GraphOS Studio
You're viewing documentation for an upcoming version of this software. Switch to the latest stable version.

Uploading files


Apollo Kotlin supports file uploads via the GraphQL multipart request specification with a few caveats:

  • Uploading files with GraphQL is most often suitable for proof-of-concept applications. In production, using purpose-built tools for file uploads may be preferable. Refer to this blog post for the advantages and disadvantages of multiple approaches.
  • The Apollo Router doesn't support multipart-form uploads.

Uploading files with Apollo Kotlin

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

build.gradle[.kts]
apollo {
service("service") {
mapScalarToUpload("Upload")
}
}

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

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

Now let's consider a 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 :

val response = apolloClient.mutation(SingleUploadMutation(file = upload)).execute()
Previous
UI Tests
Next
Handling nullability
Edit on GitHubEditForumsDiscord