在Apollo联邦架构中,可以使用Apollo Server 实现文件上传。以下是一个示例代码:
在 Apollo Server 上添加 FileUpload 类型:
const server = new ApolloServer({
schema: buildFederatedSchema([{typeDefs, resolvers}]),
plugins: [ApolloServerPluginLandingPageGraphQLPlayground],
uploads: false // 改为 true
});
在 resolvers 中添加一个 Mutation 以上传文件:
const resolvers = {
Mutation: {
uploadFile: async (_, {file}) => {
const { createReadStream, filename, mimetype, encoding } = await file;
// 处理文件上传
return true;
},
},
};
然后在 typeDefs 中声明 FileUpload 类型:
const typeDefs = gql`
scalar Upload
type Mutation {
uploadFile(file: Upload!): Boolean
}
`;
现在就可以通过 Apollo 客户端上传文件了。例如:
mutation UploadFile($file: Upload!) {
uploadFile(file: $file)
}
将 $file 参数设置为文件对象即可。注意,GraphQL Playground 不能上传文件,所以需要使用其他客户端软件来进行测试。