介绍
GraphQL 是一种用于 API 的查询语言,它可以使客户端精确地获取所需的数据,而不必多次获取不需要的数据。文件上传是 Web 应用程序中常见的需求,但是 GraphQL 官方规范中并没有提供文件上传的具体实现方式。本文将介绍如何在 GraphQL 中支持文件上传。
解决方案
在 GraphQL 中支持文件上传需要使用一些第三方库,例如 graphql-upload
、apollo-upload-server
等。这些库可以帮助我们在 GraphQL 中处理文件上传。
graphql-upload
graphql-upload
是一个用于处理文件上传的库,它提供了一个自定义的 GraphQL 标量类型 Upload
,可以将文件上传作为 GraphQL 查询的一部分。
以下是使用 graphql-upload
实现文件上传的示例代码:
----- - ------------- - - ------------------------ ----- - ------------- - - -------------------------- ----- -- - -------------- ----- -------- - - ------ ------ ---- ----- - ------ ------- - ---- -------- - ---------------- --------- -------- - -- ----- --------- - - ------ - ------ -- -- ------ -------- -- --------- - ----------- ----- --- - ---- -- -- - ----- - ----------------- -------- - - ----- ----- ----- ------ - ------------------- ----- ---- - ------------------------ ------ --- ----------------- ------- -- ------ ------------ ------- -- - -- ------------------ -- ------ --- --------- ---- -------------------- -------------- -- --------------------------------- ------------ ------- -- -------------- ------------- -- -- -------------- -- -- -- ------- -------------- -- ----- ------ - --- --------------- --------- --------- --- --------------- -- ------------------- -- ------- -- ------------------
在上面的示例中,我们定义了一个 Upload
标量类型,并在 Mutation
中定义了一个 uploadFile
方法。该方法接收一个 file
参数,类型为 Upload
。在方法中,我们通过 createReadStream
方法获取文件的可读流,并将其写入到指定的文件路径中。
apollo-upload-server
apollo-upload-server
是一个适用于 Apollo Server 的文件上传中间件,它可以帮助我们在 GraphQL 中处理文件上传。
以下是使用 apollo-upload-server
实现文件上传的示例代码:
----- - ------------ - - ------------------------- ----- - --------------------------------- - - ------------------------------ ----- - ------------ - - ---------------- ----- - -------------------- - - -------------------------- ----- -- - -------------- ----- -------- - - ---- ----- - ------ ------- - ---- -------- - ---------------- --------- -------- - -- ----- --------- - - ------ - ------ -- -- ------ -------- -- --------- - ----------- ----- --- - ---- -- -- - ----- - ----------------- -------- - - ----- ----- ----- ------ - ------------------- ----- ---- - ------------------------ ------ --- ----------------- ------- -- ------ ------------ ------- -- - -- ------------------ -- ------ --- --------- ---- -------------------- -------------- -- --------------------------------- ------------ ------- -- -------------- ------------- -- -- -------------- -- -- -- -- ----- ------ - --- -------------- --------- ---------- -------- ------------------------------------ ---------- ---- -------- -- --- -- -- - ------ - --- -- -- --- ----- ---------- - --------------- ------------------- ----- ---- -- -- -- - ------------------- -- ------- -- ------------------------ --- ------------------------ ---- ----------------------- ---
在上面的示例中,我们使用了 graphqlUploadExpress
中间件来处理文件上传。在 Mutation
中定义了一个 uploadFile
方法,该方法接收一个 file
参数,类型为 Upload
。在方法中,我们通过 createReadStream
方法获取文件的可读流,并将其写入到指定的文件路径中。
结论
在 GraphQL 中支持文件上传需要使用一些第三方库,例如 graphql-upload
、apollo-upload-server
等。这些库可以帮助我们在 GraphQL 中处理文件上传。在文件上传时,我们需要获取文件的可读流,并将其写入到指定的文件路径中。通过本文的介绍,我们可以了解如何在 GraphQL 中支持文件上传,并可以根据需要选择适合自己的解决方案。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672603db2e7021665e195654