在 GraphQL 中处理大文件上传

阅读时长 6 分钟读完

前言

GraphQL 是一种流行的数据查询和操纵语言,它广泛用于构建现代 Web 应用程序。它的弹性和可组合性使得它成为前端开发人员的首选。但当需要处理大规模文件上传时,工作呈现出了挑战性。

在该文中,我们将探讨使用 GraphQL 如何处理大文件的上传,我们还将分享如何使用 GraphQL API 处理大文件上传的最佳实践。

处理大文件上传的挑战

当使用 GraphQL 上传大型文件时,可能需要处理以下一些挑战:

  • 内存消耗:文件上传时需要将文件缓存到内存中,如果上传的文件非常大,则可能需要大量内存。而且,上传的文件越大,越可能导致服务器崩溃。
  • 网络稳定性:上传大文件时,如果因为网络中断造成上传失败,那么重新上传将成为一个挑战,因为重新上传更大的文件需要更长的时间。

解决这些问题的方法之一是使用连接(Relay-styleApollo-upload-client)。

GraphQL 文件上传的最佳实践

1. 前端设置

首先,我们需要配置前端以接受文件流,并使用FormData API发送请求。以下是前端示例代码:

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

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

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

2. 后端设置

此处假设使用 Node.js 作为后端语言,使用 Apollo Server 作为 GraphQL 服务器。

1. 安装依赖

我们需要安装以下依赖:

graphql-upload 将帮助我们处理文件,apollo-server-express 将帮助我们将 GraphQL 服务器集成到 Express 应用程序中,multer 是 Express 的文件上传中间件。

2. 启用文件上传

我们需要使用 graphql-upload 提供的中间件启用文件上传。以下是后端示例代码:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在上述代码中,我们创建了 file 字段是 Upload 类型的 uploadFile mutation。createReadStreamfile 对象提供的方法,它允许我们从文件中读取流。

接下来,我们使用 createWriteStream 将文件流写入磁盘。writeStream 的目标位置可以通过 storage 参数设置。为了简单起见,这里我们将文件上传到 ./uploads/ 目录下。

最后,我们使用 graphqlUploadExpress() 启用文件上传中间件,并将 Apollo Server 集成到 Express 应用程序中。

结论

在这篇文章中,我们探讨了如何使用 GraphQL 处理大文件上传的挑战,以及使用 GraphQL 文件上传的最佳实践。如果您需要处理大规模文件上传,我们建议使用 Relay-style 或 Apollo-upload-client。

这些最佳实践应该让你重新定义文件大小和稳定性的界限,使 GraphQL 成为处理 Web 应用程序的首选工具之一。

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

纠错
反馈