解答:如何在 GraphQL 中支持文件上传

介绍

GraphQL 是一种用于 API 的查询语言,它可以使客户端精确地获取所需的数据,而不必多次获取不需要的数据。文件上传是 Web 应用程序中常见的需求,但是 GraphQL 官方规范中并没有提供文件上传的具体实现方式。本文将介绍如何在 GraphQL 中支持文件上传。

解决方案

在 GraphQL 中支持文件上传需要使用一些第三方库,例如 graphql-uploadapollo-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-uploadapollo-upload-server 等。这些库可以帮助我们在 GraphQL 中处理文件上传。在文件上传时,我们需要获取文件的可读流,并将其写入到指定的文件路径中。通过本文的介绍,我们可以了解如何在 GraphQL 中支持文件上传,并可以根据需要选择适合自己的解决方案。

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