Serverless 架构下的文件上传与下载优化实践

阅读时长 10 分钟读完

Serverless 架构下的文件上传与下载优化实践

随着 Serverless 架构得到越来越广泛的应用,其能够简化开发、提高代码可维护性等优势也越来越受到了前端开发者们的追捧。在实际开发中,文件上传和下载是前端开发中比较常见的操作,本文将详细介绍如何在 Serverless 架构下进行文件上传、下载操作的优化实践,旨在提供一些指导性意义。

一、文件上传

在传统的 Web 应用中,文件上传往往是通过表单的形式进行提交,但这种方式在 Serverless 架构下并不适用。为了实现文件上传,我们需要使用 AWS S3 服务来存储文件,而在前端,我们需要使用 AWS SDK for JavaScript 来实现文件上传。

1.1 初始化 AWS

首先,我们需要初始化 AWS。需要引入以下三个库:

1.2 开始上传

在初始化 AWS 后,我们就可以开始上传文件了。下面是一个上传文件的示例代码:

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

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

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

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

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

代码中需要注意的是,我们将文件名设置为一个特定的格式——${UPLOAD_PREFIX}${CryptoJS.MD5(file.name)}-${Date.now().toString().slice(-FIXED_CHAR_LENGTH)},这是为了避免重名问题。同时,我们还需要限制文件大小。

1.3 另一种方式:使用 Pre-Signed URL

相比使用 SDK 进行文件上传,另一种常用的方案是使用 Pre-Signed URL。这种方式可以使我们直接通过前端将文件上传到 S3,而无需通过服务器进行中转,加快了文件上传的速度。下面是一个使用 Pre-Signed URL 的示例:

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

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

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

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

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

代码中需要注意的是,我们使用 getSignedUrl 方法生成了一个 Pre-Signed URL,并使用 XMLHttpRequest 进行文件上传。

二、文件下载

在 Serverless 架构下,文件下载的方案有很多,其中比较常用的方案是通过通过 Amazon CloudFront 加速下载。这是因为 AWS S3 的下载速度在大流量和高并发的场景下可能存在性能问题,而 Amazon CloudFront 可以帮助我们加速文件的分发,提高文件下载的速度。

2.1 初始化 AWS 和 CloudFront

下载文件之前,我们需要初始化 AWS 和 CloudFront:

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

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

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

在这里,我们初始化了 AWS SDK,同时还初始化了 CloudFront,这样在下载文件时就可以使用 CloudFront 的加速下载服务了。

2.2 开始下载

在初始化 AWS 和 CloudFront 后,我们就可以开始文件下载了。下面是一个下载文件的示例代码:

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

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

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

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

代码中需要注意的是,我们使用了 CloudFront 的 getSignedUrl 方法生成了一个加速下载的 URL,同时在下载文件时,还需要设置 Content-TypeRange 这两个参数。

三、结语

本文介绍了 Serverless 架构下的文件上传和下载优化实践,并提供了示例代码。文件上传和下载作为前端开发中比较常见的操作,对于前端开发者们来说,这些优化技巧可以提高代码的可维护性、降低服务器成本,同时也可以提高用户体验。

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

纠错
反馈

纠错反馈