npm 包 gridfs-form 使用教程

阅读时长 7 分钟读完

前言

在前端开发中,文件上传是很常见的一项功能,但对于大文件的上传,单纯使用传统的表单方式并不是很理想。而 GridFS 是 MongoDB 提供的一种存储大文件的方式,因此使用其作为大文件上传的存储方案是非常不错的选择。本文将介绍一个基于 Node.js 的 npm 包 gridfs-form,它可以方便地将表单中的文件上传到 MongoDB 的 GridFS。

gridfs-form 的安装

使用 npm 安装 gridfs-form:

安装完成后,就可以在项目中使用 gridfs-form 了。

使用 gridfs-form

初始化

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

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

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

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

在初始化时,需要先创建与数据库的连接。然后,通过调用 gridfs-form 的初始化函数,得到一个表单对象 form,用于处理上传的表单数据,以及一个中间件对象 middlewares,用于在 Express 应用中使用。

提交表单

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

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

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

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

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

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

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

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

在处理表单提交时,需要使用表单对象 form 的 parse 方法来解析表单数据。parse 需要传入一个回调函数,该函数会在解析完成后被调用,回调函数的第二个参数 fields 是表单中的非文件字段,files 是表单中的文件字段。接着,调用表单对象 form 的 upload 方法来保存文件到 GridFS 中。

获取文件流

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

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

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

在从 GridFS 中获取文件时,需要创建一个 GridFSBucket 对象,并通过其 openDownloadStreamByName 方法根据文件名获取文件流。

示例代码

下面是一个完整的示例代码,用于实现文件上传与下载:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结

本文介绍了使用 npm 包 gridfs-form 将表单中的文件上传到 MongoDB 的 GridFS 的方法。在使用 gridfs-form 时,需要先创建与数据库的连接,然后通过调用初始化函数得到表单对象和中间件对象。在处理表单提交时,需要使用表单对象的 parse 方法来解析表单数据,然后使用 upload 方法将上传的文件保存到 GridFS 中。在获取文件时,需要创建 GridFSBucket 对象,并通过其 openDownloadStreamByName 方法根据文件名获取文件流。

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

纠错
反馈

纠错反馈