使用 Fastify 和 Google Cloud Storage 集成云存储

阅读时长 10 分钟读完

简介

在构建 Web 应用程序时,数据的存储是一个必不可少的任务。云存储为开发人员提供了可靠、高效的存储服务,并可通过 API 轻松地将其集成到应用程序中。

Fastify 是一个高效的 Web 框架,它提供了简单易用的路由、中间件和插件机制。与其他框架相比,Fastify 具有更快的处理速度和更小的内存占用。同时,Fastify 支持异步代码,并提供了许多有用的功能和扩展点,使其成为建立可靠 Web 框架的绝佳选择。

Google Cloud Storage 是 Google 提供的云存储解决方案,它提供了可靠的、高效的、可扩展的存储服务,能够存储任意类型和大小的数据,并支持多种访问方式,包括 REST API、命令行工具和客户端库等。

在本文中,我们将介绍如何使用 Fastify 和 Google Cloud Storage 集成云存储。我们将通过一个示例项目来演示如何将上传的文件保存到 Google Cloud Storage 中,并从中读取文件。

准备工作

在开始之前,您需要完成以下准备工作:

  1. 安装 Node.js 和 npm。
  2. 创建 Google Cloud Storage 帐号并创建一个存储桶。
  3. 在本地机器上安装 Google Cloud Storage 客户端库并配置身份验证。
  4. 创建一个 Fastify 项目和路由。

关于如何创建 Google Cloud Storage 帐号和存储桶,以及如何配置身份验证和安装客户端库,请参考 Google Cloud Storage 文档。

实现步骤

第一步:安装必要的依赖项

首先,我们需要安装必要的依赖项。我们需要安装以下两个库:

  1. @google-cloud/storage:提供了 Google Cloud Storage 的 Node.js 客户端库。
  2. fastify-formbody:提供了一个插件,用于解析上传的文件数据。

第二步:创建存储桶对象

接下来,我们需要创建一个存储桶对象,用于保存上传的文件。我们将使用 @google-cloud/storage 库提供的 Bucket 类来创建存储桶对象。

在这里,我们首先导入 @google-cloud/storage 库,并使用 Storage 类创建存储桶对象。如果存储桶位于非默认 GCP 项目和区域中,则需要传递适当的选项。接下来,我们使用存储桶名称创建存储桶对象。

第三步:创建上传路由并处理文件

现在,我们需要创建一个上传文件的路由,并处理上传的文件。我们将使用 fastify-formbody 插件提供的 parse 方法来解析上传的表单数据。

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

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

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

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

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

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

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

在这里,我们首先创建一个 POST 路由,并使用 parse 方法解析表单数据。然后,我们检查是否上传了文件。如果没有,则返回 400(Bad Request)错误。我们使用时间戳和文件名创建一个新的文件名,并使用 file.file 属性创建一个文件流,该属性指定上传文件的二进制数据。然后,我们设置文件元数据并创建一个文件选项对象。最后,我们使用存储桶对象和文件选项对象创建一个写入流,并将它与文件流关联起来。我们使用 on 方法监听错误和完成事件,并在上传完成时返回 200(OK)响应。

第四步:创建下载文件路由并提供文件下载

最后,我们需要创建一个下载文件的路由,并提供文件的下载。我们将使用 @google-cloud/storage 库提供的 File 类来获取存储桶中的文件。然后,我们将使用 fastify-reply-from 插件提供的方法将文件流返回到客户端。

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

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

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

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

在这里,我们首先创建一个 GET 路由,并使用文件名获取存储桶中的文件。然后,我们检查文件是否存在。如果不存在,则返回 404(Not Found)错误。我们使用 createReadStream 方法创建一个读取流,并将其与文件流相关联。然后,我们使用 type 方法设置文件的 MIME 类型,并使用 send 方法将文件流返回到客户端。

示例代码

完整的示例代码如下所示:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

结论

在本文中,我们介绍了如何使用 Fastify 和 Google Cloud Storage 集成云存储。我们首先介绍了 Fastify 和 Google Cloud Storage 的基本概念,然后详细讲解了如何通过一个示例项目来保存和读取文件。本文提供了有深度的学习和指导意义,并包含了示例代码,帮助读者更好地理解和应用本文介绍的技术。希望读者能够通过本文学到一些有用的知识和技能,并将它们应用于自己的项目中。

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

纠错
反馈

纠错反馈