Serverless 应用中使用 OSS 下载文件失败解决方法

阅读时长 4 分钟读完

一、背景

随着 Serverless 架构的流行,越来越多的应用开始使用无服务器架构搭建,其中又以阿里云的 Serverless 应用最为常见,因此本文将以阿里云 Serverless 应用为例。

在 Serverless 应用中,经常需要使用对象存储(OSS)来存储和下载文件。但是,在实际应用中,我们可能会遇到使用 OSS 下载文件失败的情况。本文将探讨这个问题,并提供一些解决方法和注意点。

二、问题描述

在 Serverless 应用中使用 OSS 下载文件时,可能会出现以下错误:

三、原因分析

这个错误的原因是因为 OSS 不支持带重定向的下载,而默认情况下,阿里云的 OSS Node.js SDK 会在下载时自动添加 followRedirects 选项,并将其设为 true,因此会出现以上错误。

四、解决方法

  1. 关闭重定向

第一种解决方法是在下载文件时,手动将 followRedirects 选项设为 false。示例代码如下:

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

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

  --- -
    ----- ------ - ----- ---------------------- -
      ---------------- ------
      -------- -
        ---------- ----------
      --
    ---
    --------------------
    -- ---------------
  - ----- --- -
    ---------------
    ------ --
  -
--
  1. 添加 Referer 请求头

如果文件下载链接中带有重定向,那么在下载前,我们需要添加一个请求头,指定下载链接的来源地址。可以添加 Referer 请求头来解决这个问题。示例代码如下:

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

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

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

五、注意点

  1. 如果下载的文件中包含重定向,那么需要手动设置 followRedirects 选项为 false;
  2. 如果下载的文件是前端页面,需要添加 Referer 请求头指定来源地址。

六、总结

对于 Serverless 应用中使用 OSS 下载文件失败的问题,我们可以通过手动设置 followRedirects 选项为 false 或添加 Referer 请求头的方式来解决。同时,我们也需要注意在下载前,先了解文件下载链接中是否包含重定向,以及下载的文件是否需要来源地址。

希望本文对大家有所帮助,并可以在实际项目中得到应用。

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

纠错
反馈