GraphQL 中处理文件上传的方法

阅读时长 6 分钟读完

在前端开发中,处理文件上传是非常常见而又繁琐的操作。而在使用 GraphQL 进行网络请求时,如何处理文件上传则成为了一个新的问题。本篇文章将介绍使用 GraphQL 处理文件上传的方法,为你开发时提供指导和帮助。

GraphQL 中的文件上传

在 GraphQL 中,文件上传的解决方案有两种:使用 Base64 编码传递文件内容或使用 multipart/form-data 的方式进行传输。

使用 Base64 编码传递文件内容

使用 Base64 编码将文件内容传递给 GraphQL 服务器是比较简单的一种方法。需要将文件内容转换为 Base64 编码后,传递给服务器即可。在 GraphQL 类型定义中,文件类型可以定义为字符串类型,如下所示:

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

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

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

在这个示例中,Upload 是一个自定义的标量类型,它的定义如下:

使用 Upload 自定义标量类型时,可以添加 @constraint 指令来对文件的大小进行限制。maxSize 属性表示的是最大限制大小,单位是 MB。在使用 Upload 类型时,还需要使用 GraphQLUpload 模块来解析文件。GraphQLUpload 模块是一个专门用于解析文件上传的中间件,可在 npm 上进行下载。

在服务器端需要做两步操作:验证上传的文件大小标准和保存文件。如果文件符合标准,直接将文件保存到服务器上即可。

使用 multipart/form-data 进行上传

另一种常见的方式是使用 multipart/form-data。此类型的请求包含一个文件和其他表单字段。如果使用此类型来上传文件,则需要使用一个名为 FormData 的对象来包装数据和文件。以下是示例代码:

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

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

在 GraphQL 类型定义中,文件类型可以定义为 Upload 类型,如下所示:

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

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

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

在 GraphQL 服务器端要做两步操作:第一步是解析请求并将文件保存到服务器上;第二步是将传递给 Resolver 函数的对象中的 Upload 处理。在解析 Upload 类型时,需要使用 GraphQLUpload 模块进行解析。这个模块还可以执行验证和转换操作。

以下是一个处理上传文件的 Resolver 函数示例代码:

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

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

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

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

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

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

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

总结

本文介绍了两种常用的 GraphQL 中的文件上传方式:使用 Base64 编码传递文件内容和使用 multipart/form-data 进行上传。对于上传文件,我们需要在 GraphQL 类型定义中使用 Upload 类型,并在 GraphQL 服务器端处理该类型。为了解析 Upload 类型,我们需要使用 GraphQLUpload 模块,这个模块还能执行验证和转换操作。这些内容很重要,掌握这些技术可以帮助你更好地处理 GraphQL 中的文件上传。

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

纠错
反馈