Hapi 框架中的多文件上传及文件下载实现

阅读时长 8 分钟读完

Hapi 是一个 Node.js 的 Web 应用框架,其提供了一个强大、具有可扩展性的插件架构,使它成为了一个优秀的选择。其中,多文件上传及文件下载功能是 Web 应用开发中常见的需求之一。本文将介绍如何在 Hapi 框架中实现多文件上传和文件下载,可供开发者参考学习。

多文件上传实现

多文件上传需要使用 hapi-payload-plugin 插件,在服务器端接收文件,并将文件保存至服务端。其中,三个关键点是:

  1. 设置路由接口,定义上传的接口;
  2. 配置 hapi-payload-plugin 插件,使其支持多文件上传;
  3. 编写文件上传功能的处理代码。

设置路由接口

首先需要设置路由接口,接收上传的文件:

-- -------------------- ---- -------
--------------
  ------- -------
  ----- ----------
  -------- ----- --------- -- -- -
    -- ------
  --
  ------- -
    -------- -
      ------- ---------
      ------ -----
      ------ -----------------------
    -
  -
---
展开代码

此处我们定义了一个 /upload 的路由接口,用于接收文件上传请求。其中,我们必须设置 payload 配置项, output: 'stream' 表示将文件流上传到服务端; parse: true 表示将上传的数据转化为对象; allow: ['multipart/form-data'] 即表单类型为 multipart/form-data,支持文件上传。

配置 hapi-payload-plugin 插件

接下来需要安装并注册 hapi-payload-plugin 插件,才能使服务端支持多文件上传功能。在安装插件后,在服务启动文件中注册插件。

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

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

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

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

-------
展开代码

完成以上配置后,就可以在 handler 函数中读取上传的文件,并将文件保存至服务端。

上传代码实现

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

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

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

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

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

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

    ---------------- ----- -- -
      ------------
    ---
  ---
-
展开代码

完整的多文件上传代码

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

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

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

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

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

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

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

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

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

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

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

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

-------
展开代码

文件下载实现

文件下载需要使用 hapi 框架提供的 file() 方法。在路由配置中使用 file() 方法即可完成文件下载功能。

设置路由接口

-- -------------------- ---- -------
--------------
  ------- ------
  -------------------------
  -------- -
    ----- ----- --------- -- -
      ------ -----------------------------------
    -
  -
---
展开代码

此处我们定义了一个 GET 接口,用于下载 ./uploads/ 目录下的文件。使用 handler 配置项,通过 file() 方法设置返回文件路径。注意,这里的 {file*} 是一个通配符,在实际使用时可以根据需求修改。

完整的文件下载实现代码

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

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

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

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

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

-------
展开代码

总结

本文介绍了如何在 Hapi 框架中实现多文件上传和文件下载功能。需要注意以下几点:

  1. 需要使用 hapi-payload-plugin 插件,才能支持多文件上传功能;
  2. 使用 hapi 提供的 file() 方法,将服务端文件托管,即可实现文件下载。

Hapi 框架具有可扩展性的插件架构,使得开发者可以方便地进行二次开发。希望通过本文的介绍,能对开发者掌握 Hapi 框架的相关能力和开发实践提供一些帮助。

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

纠错
反馈

纠错反馈