在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 不能上传文件,所以需要使用其他客户端软件来进行测试。