MongoDB 之上传文件及文件存储方式选择

阅读时长 6 分钟读完

在 Web 开发中,文件上传是一个常见的需求,而 MongoDB 作为一种 NoSQL 数据库,也提供了一种方便的方式来存储和管理上传的文件。

本文将介绍 MongoDB 中如何上传文件,以及文件存储方式的选择,帮助读者深入了解 MongoDB 的文件管理功能。

上传文件

MongoDB 提供了 GridFS 来管理大文件的存储和查询。GridFS 采用了分块存储的方式,将文件分成多个块进行存储,支持高效的文件上传和下载。

以下是一个使用 Node.js 和 GridFS 来上传文件的示例代码:

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

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

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

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

上面的代码中,首先连接 MongoDB 数据库,然后创建 GridFS 流,并指定要上传的文件名。接着,使用 Node.js 的文件读取流将文件读取并上传到 GridFS 中。最后,通过监听 writeStreamclose 事件,可以获取到上传后的文件信息。

文件存储方式选择

在 MongoDB 中,GridFS 提供了两种存储方式:存储在数据库中和存储在文件系统中。

存储在数据库中

将文件存储在数据库中,可以方便地进行备份和恢复,避免了文件和数据库不同步的问题。但是,这种方式会增加数据库的负担,可能会影响数据库的性能。

以下是一个使用 Node.js 和 GridFS 将文件存储在数据库中的示例代码:

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

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

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

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

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

上面的代码中,使用 gfs.files.findOne 方法来查找上传的文件,并使用 gfs.createReadStream 方法来读取文件内容。

存储在文件系统中

将文件存储在文件系统中,可以减轻数据库的负担,提高数据库的性能。但是,这种方式会增加文件系统的负担,需要进行文件备份和恢复,同时可能会出现文件和数据库不同步的问题。

以下是一个使用 Node.js 和 GridFS 将文件存储在文件系统中的示例代码:

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

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

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

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

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

上面的代码中,使用 gfs.createReadStream 方法来读取上传的文件内容,并使用 Node.js 的文件写入流将文件写入到文件系统中。

总结

本文介绍了 MongoDB 中如何上传文件,以及文件存储方式的选择。通过了解 MongoDB 的文件管理功能,可以更好地应对 Web 开发中的文件上传和存储需求。

在选择文件存储方式时,需要根据具体情况进行权衡和选择,以达到最优的性能和可靠性。

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

纠错
反馈