如何使用 GraphQL 进行文件上传

在前端开发过程中,文件上传是一个常见的需求。而 GraphQL 是一种用于 API 的查询语言和运行时环境,使用它可以更方便地管理 API,并且支持对多个资源的复杂查询。本文将介绍如何使用 GraphQL 进行文件上传,并提供基于 Node.js 的示例代码。

GraphQL 对文件上传的支持

在 GraphQL 中,文件上传并不是一个内置的功能。GraphQL 建议使用外部库或插件来处理文件上传。常见的解决方案是使用 apollo-upload-servergraphql-upload 等库或插件。这些库或插件都提供了方便的解决方案,使得在 GraphQL 中处理文件上传变得容易。

如何使用 apollo-upload-server

在本文中,我们将介绍如何使用 apollo-upload-server 进行文件上传。apollo-upload-server 是一个 GraphQL 上传插件,它通过 GraphQL multipart request specification 提供了文件上传功能。

首先,我们需要依赖两个库:apollo-server-expressapollo-upload-server。你可以使用 NPM 进行安装:

然后,我们需要在 Express 应用中启用文件上传功能。以下是一个简单的示例,它使用 graphqlUploadExpress 中间件启用上传处理:

在这个示例中,graphqlUploadExpress 中间件用于启用上传处理。请注意,我们将上传选项设置为 false,这意味着文件上传将启用。你可以通过将 uploads 设为 true 来禁用文件上传功能。

下一步是在 GraphQL Schema 中定义上传类型。以下是一个包含上传类型的 Schema 示例:

在这个示例中,我们定义了一个 File 类型,它包含文件名、MIME 类型、编码类型和文件的 URL。我们还定义了一个 Mutation 类型,它包含一个上传文件的方法 uploadFile。为了支持文件上传,我们定义了 file 参数的类型为 Upload,即 GraphQL multipart request specification 中提供的上传类型。

最后,我们需要在 Mutation Resolver 中处理文件上传并将文件信息返回给客户端。以下是一个解决方案:

在这个示例中,我们首先获取上传文件的流和文件信息,然后将流写入到磁盘上,最后将文件信息返回给客户端。

文件上传的 Web 界面

完成了上述的配置和代码,我们会发现文件上传已经支持,但我们还需要为用户提供界面进行交互上传操作,以下是基于 React 的示例代码:

在这个示例中,我们使用 Upload 组件提供文件上传的 Web 界面,并使用 useMutation 钩子发送上传请求。在上传成功时,我们会给用户反馈。此外,我们还使用了 Ant Design 的 UploadOutlined 图标。

总结

本文介绍了如何使用 apollo-upload-server 和 GraphQL 完成文件上传,并提供了基于 Node.js 的示例代码。处理文件上传是一项常见的任务,这里所介绍的解决方案可以帮助我们简化开发工作,提高效率。同时,GraphQL 的查询语言和运行时环境也让我们可以更方便地管理 API 和复杂的查询。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6530db4c7d4982a6eb26c2d4


纠错
反馈