Join us from October 8-10 in New York City to learn the latest tips, trends, and news about GraphQL federation and API platform engineering.Join us for GraphQL Summit 2024 in NYC
Docs
Start for Free

Uploading files


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

  • Uploading files with 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 possible approaches and their advantages and disadvantages.
  • The Apollo Router doesn't support multipart/form-data 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 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 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()
Previous
Apollo Debug Server
Next
Monitoring the network state
Rate articleRateEdit on GitHubEditForumsDiscord

© 2024 Apollo Graph Inc.

Privacy Policy

Company