如何在 GraphQL 中处理文件上传及下载

阅读时长 7 分钟读完

GraphQL 是一种用于 API 构建的查询语言和运行时环境,它的强大之处在于可以根据客户端的需求精确地获取数据。在许多应用程序中,文件上传和下载是必需的功能之一。本文将介绍如何在 GraphQL 中处理文件上传及下载。

文件上传

在 GraphQL 中处理文件上传需要使用 GraphQL Upload 这个扩展库。它提供了一个 Upload 标量类型,可以用于处理文件上传。

安装及配置

首先,需要安装 graphql-upload 库:

然后,在 GraphQL 的 ApolloServer 中配置 graphql-upload

-- -------------------- ---- -------
----- - ------------ - - -------------------------
----- - ------------- - - --------------------------

----- --------- - - -- --------- -- --
----- -------- - -- ---- ----------- ---

----- ------ - --- --------------
  ---------
  ----------
  -------- ------ -- ------
  -- ------
  ----- --------- --- -- -
    ------ -
      ----
      -- ------- -- --
      ------------ ---------
      -- ------- -
      --------- --
    --
  --
---

----------------------- --- -- -- -
  --------------- ------ ----- -- ---------
---

在上面的例子中,我们将文件大小限制为 10 MB,文件数量限制为 5。

编写上传查询

在客户端发起文件上传请求时,需要使用 FormData 对象将文件上传到服务端。以下是一个示例:

-- -------------------- ---- -------
----- ----------- - ----
  -------- ----------------- -------- -
    ---------------- ------ -
      --------
      --------
      --------
      ---
    -
  -
--

----- --------- - --------------------------------------
----- ---- - -------------------
----- -------- - --- -----------
----------------------- ------

---------------
  --------- ------------
  ---------- - ----- -------------------- --
---

实现上传功能

在服务端实现文件上传功能的代码如下:

-- -------------------- ---- -------
----- - ----------------- - - --------------
----- - ------------- - - --------------------------

----- ---------- - ------------

----- --------- - -
  ------- --------------
  --------- -
    ----- ------------------ - ---- -- - --- -- -
      ----- - ----------------- --------- --------- -------- - - ----- -----
      ----- ------ - -------------------
      ----- -------- - ----------------------------
      ----- ----------- - ----------------------------
      -------------------------

      ------ -
        ---------
        ---------
        ---------
        ---- ------------------------------------
      --
    --
  --
--

在上面的例子中,我们获取了上传文件的元数据,然后将文件写入到指定的目录中。最后,返回文件的元数据和 URL。

文件下载

在 GraphQL 中处理文件下载需要使用 express 库。以下是示例代码:

-- -------------------- ---- -------
----- ------- - -------------------
----- - ------------ - - ---------------------------------

----- --- - ----------

----- --------- - - -- --------- -- --
----- -------- - -- ---- ----------- ---

----- ------ - --- --------------
  ---------
  ----------
---

------------------------ --- ---

-- ------
------------------------------- ----- ---- -- -
  ----- - -------- - - -----------
  --------------------------------------
---

------------ ----- ---- -- -- --
  --------------- ------ ----- -- --------------------------------------------
--

在上面的例子中,我们使用 express 库处理文件下载请求。当客户端访问 /downloads/:filename 路径时,服务端会将指定的文件发送给客户端。

编写下载查询

在客户端发起文件下载请求时,需要使用 window.open 方法打开文件下载链接。以下是一个示例:

-- -------------------- ---- -------
----- ------------- - ----
  ----- ----------------------- -------- -
    ---------------------- ----------
  -
--

----- ------------ - ----- ---------- -- -
  ----- - ---- - - ----- --------------
    ------ --------------
    ---------- - -------- --
  ---
  -------------------------------
--

实现下载功能

在服务端实现文件下载功能的代码如下:

在上面的例子中,我们返回文件下载链接。

总结

本文介绍了如何在 GraphQL 中处理文件上传及下载。在文件上传方面,我们使用了 graphql-upload 扩展库,并在服务端实现了文件上传功能。在文件下载方面,我们使用了 express 库,并在服务端实现了文件下载功能。希望本文能够对你有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6568c35fd2f5e1655d16caf9

纠错
反馈