一、背景
随着 Serverless 架构的流行,越来越多的应用开始使用无服务器架构搭建,其中又以阿里云的 Serverless 应用最为常见,因此本文将以阿里云 Serverless 应用为例。
在 Serverless 应用中,经常需要使用对象存储(OSS)来存储和下载文件。但是,在实际应用中,我们可能会遇到使用 OSS 下载文件失败的情况。本文将探讨这个问题,并提供一些解决方法和注意点。
二、问题描述
在 Serverless 应用中使用 OSS 下载文件时,可能会出现以下错误:
Error: do not support download object with redirect
三、原因分析
这个错误的原因是因为 OSS 不支持带重定向的下载,而默认情况下,阿里云的 OSS Node.js SDK 会在下载时自动添加 followRedirects
选项,并将其设为 true,因此会出现以上错误。
四、解决方法
- 关闭重定向
第一种解决方法是在下载文件时,手动将 followRedirects
选项设为 false。示例代码如下:
-- -------------------- ---- ------- ----- --- - ------------------- ----- --------- - --- ----- ------------ -------------- ---------------- ------------------ --------- ----------- ------- --------- --- --------------- - ----- ------- -------- --------- -- - ----- ------- - -------------- ----- --------- - ------------ --- - ----- ------ - ----- ---------------------- - ---------------- ------ -------- - ---------- ---------- -- --- -------------------- -- --------------- - ----- --- - --------------- ------ -- - --
- 添加 Referer 请求头
如果文件下载链接中带有重定向,那么在下载前,我们需要添加一个请求头,指定下载链接的来源地址。可以添加 Referer
请求头来解决这个问题。示例代码如下:
-- -------------------- ---- ------- ----- --- - ------------------- ----- --------- - --- ----- ------------ -------------- ---------------- ------------------ --------- ----------- ------- --------- --- --------------- - ----- ------- -------- --------- -- - ----- ------- - -------------- ----- --------- - ------------ --- - ----- ------ - ----- ---------------------- - -------- - ---------- ---------- -- --- -------------------- -- --------------- - ----- --- - --------------- ------ -- - --
五、注意点
- 如果下载的文件中包含重定向,那么需要手动设置
followRedirects
选项为 false; - 如果下载的文件是前端页面,需要添加
Referer
请求头指定来源地址。
六、总结
对于 Serverless 应用中使用 OSS 下载文件失败的问题,我们可以通过手动设置 followRedirects
选项为 false 或添加 Referer
请求头的方式来解决。同时,我们也需要注意在下载前,先了解文件下载链接中是否包含重定向,以及下载的文件是否需要来源地址。
希望本文对大家有所帮助,并可以在实际项目中得到应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/659e10b2add4f0e0ff72982b