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:
build.gradle[.kts]
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) {idpathfilenamemimetype}}
Create an instance of Upload
using one of the factory methods:
// If you're on Android/JVM, you can turn a File into an uploadval 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()