上传文件
Apollo Kotlin 支持通过 GraphQL 多部分请求规范 存在以下几点注意事项:
- 使用 GraphQL 上传文件通常适用于原型应用。在生产环境中,使用专为文件上传设计的工具可能更合适。请参阅以下 博客文章 了解可能的策略及其优点和缺点。
- Apollo Router 核心和 GraphOS Router 都不支持
multipart/form-data
上传。
- Apollo Router 核心和 GraphOS Router 都不支持
使用 Apollo Kotlin 上传文件
首先,将以下自定义 标量 映射添加到 Apollo Gradle 插件配置中:
build.gradle[.kts]
apollo {service("service") {mapScalarToUpload("Upload")}}
在本例中,该 GraphQL 架构 定义了一个名为 Upload
的自定义标量类型。根据需要,您可以为您的架构使用不同的名称。
ⓘ 注意
您不需要为 Upload
注册类型适配器,因为 mapScalarToUpload
方法会自动注册它。
现在让我们考虑一个接受 mutation 作为参数的 Upload
:
mutation SingleUpload($file: Upload!) {singleUpload(file: $file) {idpathfilenamemimetype}}
使用工厂方法之一创建一个 Upload
的实例:
// 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()
执行您的 mutation:
val response = apolloClient.mutation(SingleUploadMutation(file = upload)).execute()