npm 包 apollo-upload-client 使用教程

阅读时长 9 分钟读完

简介

apollo-upload-client 是一个用于GraphQL请求中上传文件的客户端 JavaScript 库,官方提供了 React 和 Angular 的封装。

使用 apollo-upload-client,可以方便地将文件上传到服务器,并且支持多文件上传,同时还支持进度条显示以及上传取消等功能。

安装

使用 npm 安装 apollo-upload-client:

使用

1. 创建 ApolloClient

在创建 ApolloClient 实例时,需要添加一个 uploadLink 作为链接,该链接将用于上传文件。

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

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

2. 定义 GraphQL 请求

在使用 apollo-upload-client 上传文件时,GraphQL 服务器需要使用 GraphQLUpload 等插件才能支持文件上传。

3. 创建文件上传组件

我们可以创建一个用于文件上传的 React 组件,其中使用 react-dropzone 库来支持拖放上传和多文件上传。

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

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

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

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

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

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

进度条显示和上传取消

apollo-upload-client 还提供了一个 createUploadLink 方法创建链接时传入 onProgress 参数来获取上传进度信息。

如下所示,在 onProgress 中更新进度条的状态,并保存 controller,以便在上传取消时取消上传。

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

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

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

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

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

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

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

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

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

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

总结

本文介绍了如何使用 npm 包 apollo-upload-client 在 GraphQL 请求中上传文件,并演示了如何使用官方的 React 封装。在实现多文件上传时,我们使用了 react-dropzone 库来支持拖放上传和多文件上传,同时还提供了进度条显示和上传取消等功能,这可以为用户提供更好的体验。

在使用 apollo-upload-client 时,需要注意服务器需要使用 GraphQLUpload 等插件来支持文件上传,同时也需要注意在上传前添加相应的请求头信息。

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