如何从预签名的亚马逊S3 URL下载文件

2,395 阅读2分钟

在我们作为开发人员的日常生活中,我们面临许多问题。我们的生活就是解决这些小问题。

您可能在某个时候使用过 Amazon S3 来存储应用程序的文件(图像、视频、文档等)。

今天,在本文中,我们将讨论从 Amazon S3 下载文件的方法。

什么是 Amazon S3?

根据 Amazon S3 的文档,

Amazon Simple Storage Service (Amazon S3)是一种提供行业领先的可伸缩性、数据可用性、安全性和性能的对象存储服务。不同规模和行业的客户可以存储和保护任何数量的数据,用于数据湖、云原生应用程序和移动应用程序等几乎任何用例。借助经济实惠的存储类和易于使用的管理功能,您可以优化成本,组织数据,并配置精细调整的访问控制以满足特定的业务、组织和合规要求。

这是存储应用程序的大型文件的绝佳且简单的方式。

什么是预签名的 Amazon S3 URL?

当我们想要访问 Amazon S3 中的文件时,我们需要登录 AWS 并查看文件。

**如果我们希望任何人都可以在互联网上访问该文件怎么办?**我们可以通过生成预签名 URL 来实现。

Amazon S3 文件的预签名 URL 就是包含额外参数的 URL,以便互联网上的任何人都可以轻松地下载文件而不费力。

以下是预签名 URL 的示例:

presignedurldemo.s3.eu-west-2.amazonaws.com/image.png?X…

正如您在上面的示例中看到的,在 URL 中附加了一些额外的参数,例如 X-Amz-Algorithm、X-Amz-Credential、X-Amz-Date、X-Amz-Expires、X-Amz-Signature、X-Amz-SignedHeaders,这有助于轻松下载文件。

如何下载该文件?

现在您拥有了一个预签名的 Amazon S3 URL,您可以轻松地以编程方式下载文件。

使用以下代码下载文件:

function downloadFile(presignedUrl, fileName) {
  const link = document.createElement("a");
  link.href = presignedUrl;
  link.download = fileName;
  link.target = "_blank";
  link.click();
}

这就是全部。

如果您不想使用预签名 URL 方式怎么办?

没问题,您可以使用 AWS SDK 轻松地从 Amazon S3 下载任何文件。

以下是一个示例示例:

import { GetObjectCommand, S3Client } from "@aws-sdk/client-s3";

const client = new S3Client({}) // Here credentials comes in picture

export const main = async () => {
  const command = new GetObjectCommand({
    Bucket: "bucket-1",
    Key: "hello-world.txt"
  });

  try {
    const response = await client.send(command);
    const str = await response.Body.transformToString();
    console.log(str);
  } catch (err) {
    console.error(err);
  }
};

这段代码从 Amazon S3 存储桶中检索文件。

就是这样。