Express.js+MongoDB 实现文件上传及资源访问

阅读时长 7 分钟读完

随着互联网的发展,文件上传及资源访问已成为前端开发中一个非常重要的方面。在这篇文章中,我们将以 Express.js 和 MongoDB 为基础,来实现一个简单可用的文件上传和资源访问系统。

什么是 Express.js?

Express.js 是一个基于 Node.js 平台的轻量级 Web 开发框架。它简单易用,且拥有丰富的扩展和插件,可以快速而方便地实现各种 Web 应用程序的开发,并支持多种模板引擎和路由功能。

什么是 MongoDB?

MongoDB 是一个强大的 NoSQL 数据库系统,它具有可扩展性和灵活性,可以为应用程序提供高效的数据存储和处理能力。MongoDB 支持多种数据结构和查询语言,让开发者可以更简单快捷地进行数据操作。

如何实现文件上传及资源访问?

接下来,我们将:

  1. 了解如何通过 Express.js 实现文件上传;
  2. 了解如何将上传的文件保存到 MongoDB 中;
  3. 学习如何访问 MongoDB 中的储存文件;
  4. 了解如何为这些文件提供访问接口。

文件上传

文件上传是现代 Web 应用程序的一个非常基本和必要的功能。通过 Express.js,我们可以使用 multer 插件来实现文件上传。multer 是一个 Node.js 中间件,可以处理 multipart/form-data 类型的表单数据,用于上传文件。

在您的项目中,安装 multer 并将其导入:

接着,我们创建一个储存文件的文件夹,以便于将上传的文件保留在同一目录下,并定义 multer 实例:

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

在这个例子中,我们将上传的文件保存到名为 "uploads" 的文件夹中,并定义一个文件命名规则,其中包括文件原始名称和时间戳。

最后,将上传的路由指向 upload 中间件:

在上面的代码中,我们将表单中名为 "file" 的文件上传到服务器,并在上传成功后输出成功信息。

将上传的文件保存到 MongoDB 中

接下来,我们将学习如何使用 GridFS 将上传的文件直接保存到 MongoDB 中。GridFS 支持大容量的文件存储,适合于存储大量的二进制数据。

在程序中,我们使用 GridFSStorage(基于 Multer)来将文件直接储存在 MongoDB 中。

首先,安装依赖:

其次,导入 GridFSStorage 和 GridFSBucket:

定义 GridFSStorage:

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

在这个例子中,GridFSStorage 将文件保存到名为 "uploads" 的 MongoDB 存储桶中,并随机生成一个 16 字节的文件名。我们还将用户 ID 存储在文件的 Metadata 属性中,以便在访问资源时做身份验证。

最后,用 multer 将路由配置为直接保存文件:

现在,上传的文件可以直接储存在 MongoDB 权威数据库中,而无需通过文件系统!

访问 MongoDB 中的储存文件

MongoDB 中储存的文件可以通过 GridFSBucket 对象访问。我们可以通过名称访问上面建立的名为 "uploads" 的桶:

我们只需使用 gfs 即可轻松读取已储存的文件,例如:

为这些文件提供访问接口

最后,我们将为上传并储存到 MongoDB 中的文件提供 API 接口,以便客户端可以轻松访问文件。我们的 RESTful API 将支持访问和删除已存储的文件资源。

首先,我们在我们的 API 中添加以下路由:

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

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

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

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

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

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

这个代码演示了如何构建为客户端提供文件的 API。通过 GET 请求,我们可以读取文件,而通过 DELETE 请求,我们可以删除文件(根据文件名)。

总结

Express.js 和 MongoDB 是前端开发中非常重要的工具和框架,可以快速实现文件上传和资源访问等功能。在本文中,我们了解了如何使用 Express.js 和 MongoDB 实现文件上传及资源访问,并提供了详细的示例代码。希望这篇文章对您的学习和工作有所帮助!

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

纠错
反馈