下载对象 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

下载对象

本部分介绍如何从 Amazon S3 存储桶下载对象。使用 Amazon S3,您将这些对象存储在一个或多个存储桶中,每个对象的大小最多为 5 TB。任何未归档的 Amazon S3 对象都可以实时访问。但对于已归档的对象,必须先进行还原,然后才能下载。有关下载归档对象的更多信息,请参阅下载归档对象

您可以使用 Amazon S3 控制台、Amazon Command Line Interface(Amazon CLI)、Amazon SDK 或 Amazon S3 REST API 下载单个对象。要从 S3 下载对象而无需编写任何代码或运行任何命令,请使用 S3 控制台。有关更多信息,请参阅下载对象

要下载多个对象,请使用 Amazon CloudShell、Amazon CLI 或 Amazon SDK。有关更多信息,请参阅下载多个对象

如果您需要下载对象的一部分,则需要将 Amazon CLI 与额外的参数结合使用,或者使用 REST API 来仅指定要下载的字节。有关更多信息,请参阅下载对象的一部分

如果您需要下载不属于您的对象,请让对象所有者生成一个允许您下载该对象的预签名 URL。有关更多信息,请参阅从另一个 Amazon Web Services 账户下载对象

当您在 Amazon 网络之外下载对象时,将收取数据传输费用。在同一个 Amazon Web Services 区域中,Amazon 网络内部的数据传输免费,但任何 GET 请求都将收取费用。有关数据传输成本和数据检索费用的更多信息,请参阅 Amazon S3 定价

下载对象

您可以使用 Amazon S3 控制台、Amazon CLI、Amazon SDK 或 REST API 下载单个对象。

本部分介绍如何使用 Amazon S3 控制台从 S3 存储桶下载对象。

注意
  • 一次只能下载一个对象。

  • 如果您使用 Amazon S3 控制台下载对象的键名以句点 (.) 结尾,则该句点将从下载对象的键名中删除。要保留所下载对象名称末尾的句点,您必须使用 Amazon Command Line Interface(Amazon CLI)、Amazon SDK 或 Amazon S3 REST API。

从 S3 存储桶下载对象
  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Buckets(存储桶) 列表中,请选择要从中下载对象的存储桶的名称。

  3. 您可以使用以下任一方式从 S3 存储桶下载对象:

    • 选中对象旁边的复选框,然后选择下载。如果您要将对象下载到特定文件夹,请在操作菜单中,选择下载为

    • 如果要下载对象的特定版本,请打开显示版本(位于搜索框旁边)。选中所需对象版本旁边的复选框,然后选择下载。如果您要将对象下载到特定文件夹,请在操作菜单中,选择下载为

以下 get-object 示例将向您展示如何使用 Amazon CLI 从 Amazon S3 下载对象。此命令从存储桶 DOC-EXAMPLE-BUCKET1 获取对象 folder/my_image。该对象将下载到名为 my_downloaded_image 的文件中。

aws s3api get-object --bucket DOC-EXAMPLE-BUCKET1 --key folder/my_image my_downloaded_image

有关更多信息和示例,请参阅 Amazon CLI 命令参考中的 get-object

有关如何使用 Amazon SDK 下载对象的示例,请参阅使用 Amazon SDK 从 Amazon S3 桶获取对象

有关使用不同 Amazon SDK 的一般信息,请参阅使用 Amazon 开发工具包和浏览器进行 Amazon S3 开发

您可以使用 REST API 从 Amazon S3 中检索对象。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 GetObject

下载多个对象

您可以使用 Amazon CloudShell、Amazon CLI 或 Amazon SDK 下载多个对象。

Amazon CloudShell 是一个已经事先完成身份验证的浏览器式 Shell,您可以直接从Amazon Web Services Management Console启动它。

有关 Amazon CloudShell 的更多信息,请参阅《Amazon CloudShell User Guide》中的What is CloudShell?

重要

使用 Amazon CloudShell,您的主目录的存储空间最高为每个 Amazon Web Services 区域 1 GB。因此,您无法将存储桶与总大小超过此数量的对象同步。有关更多限制,请参阅《Amazon CloudShell User Guide》中的 eService quotas and restrictions

使用 Amazon CloudShell 下载对象
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 CloudShell 控制台:https://console.aws.amazon.com/cloudshell/.

  2. 运行以下命令,将存储桶中的对象同步到 CloudShell。以下命令同步名为 DOC-EXAMPLE-BUCKET1 的存储桶中的对象,并在 CloudShell 中创建一个名为 temp 的文件夹。CloudShell 会将您的对象同步到这个文件夹。要使用此命令,请将 user input placeholders 替换为您自己的信息。

    aws s3 sync s3://DOC-EXAMPLE-BUCKET1 ./temp
    注意

    要执行模式匹配以排除或包含特定对象,您可以在 sync 命令中使用 --exclude "value"--include "value" 参数。

  3. 运行以下命令,将名为 temp 的文件夹中的对象压缩到名为 temp.zip 的文件中。

    zip temp.zip -r temp/
  4. 选择操作,然后选择下载文件

  5. 输入文件名 temp.zip,然后选择下载

  6. (可选)删除同步到 CloudShell 中 temp 文件夹的 temp.zip 文件和对象。使用 Amazon CloudShell,您可在每个 Amazon Web Services 区域中拥有最高 1 GB 的持久性存储。

    您可以使用此示例命令来删除您的 .zip 文件和文件夹。要使用此示例命令,请将 user input placeholders 替换为您自己的信息。

    rm temp.zip && rm -rf temp/

此示例说明如何使用 Amazon CLI 下载指定目录或前缀下的所有文件或对象。此命令将存储桶 DOC-EXAMPLE-BUCKET1 中的所有对象复制到您的当前目录。要使用此示例命令,请使用您的存储桶名称代替 DOC-EXAMPLE-BUCKET1

aws s3 cp s3://DOC-EXAMPLE-BUCKET1 . --recursive

以下命令将存储桶 DOC-EXAMPLE-BUCKET1 中前缀 logs 下的所有对象下载到您的当前目录。它还使用 --exclude--include 参数仅复制带有后缀 .log 的对象。要使用此示例命令,请将 user input placeholders 替换为您自己的信息。

aws s3 cp s3://DOC-EXAMPLE-BUCKET1/logs/ . --recursive --exclude "*" --include "*.log"

有关更多信息和示例,请参阅 Amazon CLI 命令参考中的 cp

有关如何使用 Amazon SDK 下载 Amazon S3 存储桶中对象的示例,请参阅将 Amazon Simple Storage Service(Amazon S3)桶中的所有对象下载到本地目录

有关使用不同 Amazon SDK 的一般信息,请参阅使用 Amazon 开发工具包和浏览器进行 Amazon S3 开发

下载对象的一部分

您可以使用 Amazon CLI 或 REST API 下载对象的一部分。为此,您需要使用额外的参数来指定要下载对象的哪一部分。

以下示例命令在名为 DOC-EXAMPLE-BUCKET1 的存储桶中,对名为 folder/my_data 的对象中的字节范围执行 GET 请求。在请求中,字节范围必须以 bytes= 为前缀。部分对象将下载到名为 my_data_range 的输出文件中。要使用此示例命令,请将 user input placeholders 替换为您自己的信息。

aws s3api get-object --bucket DOC-EXAMPLE-BUCKET1 --key folder/my_data --range bytes=0-500 my_data_range

有关更多信息和示例,请参阅 Amazon CLI 命令参考中的 get-object

有关 HTTP Range 标头的更多信息,请参阅 RFC 编辑器网站上的 RFC 9110

注意

Amazon S3 不支持在单个 GET 请求中检索多个数据范围。

您可以在 REST API 中使用 partNumberRange 参数,从 Amazon S3 检索对象部分。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 GetObject

从另一个 Amazon Web Services 账户下载对象

您可以使用预签名 URL 授予对对象的限时访问权限,而不更新存储桶策略。

预签名 URL 可以在浏览器中输入,或者由程序用来下载对象。URL 使用的凭证是生成该 URL 的 Amazon 用户的凭证。创建 URL 后,在该 URL 过期之前,任何拥有预签名 URL 的人都可以下载相应的对象。

您可以使用 Amazon S3 控制台,按照以下步骤生成预签名 URL 来共享对象。使用控制台时,预签名 URL 的最长过期时间为自创建时起 12 小时。

使用 Amazon S3 控制台生成预签名 URL
  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在左侧导航窗格中,选择存储桶

  3. Buckets(存储桶)列表中,请选择包含要为其生成预签名 URL 的对象的存储桶的名称。

  4. Objects(对象)列表中,选择要为其生成预签名 URL 的对象。

  5. 对象操作菜单上,请选择使用预签名 URL 共享

  6. 指定您希望的预签名 URL 有效时间长度。

  7. 请选择 Create presigned URL(创建预签名 URL)。

  8. 出现确认消息时,URL 将自动复制到剪贴板。如果您需要再次复制预签名 URL,您将看到一个按钮,用于复制该 URL。

  9. 要下载对象,请将 URL 粘贴到任何浏览器中,此时机会尝试下载该对象。

有关预签名 URL 和其他创建预签名 URL 方法的更多信息,请参阅使用预签名 URL

下载归档对象

要降低不经常访问的对象的存储成本,您可以对此类对象进行归档。当您归档对象时,它会被移动到低成本存储中,这意味着您无法实时访问它。要下载归档对象,您必须先还原该对象。

根据存储类的不同,您可以在几分钟或几小时内还原归档对象。您可以使用 Amazon S3 控制台、S3 批量操作、Amazon S3 REST API、Amazon SDK 和 Amazon Command Line Interface(Amazon CLI)还原归档的对象。

有关说明,请参阅恢复已归档的对象。您可在还原归档对象后下载它。

下载对象故障排查

当您尝试从 Amazon S3 下载对象时,权限不足、错误的存储桶或错误的 Amazon Identity and Access Management(IAM)用户策略会导致出错。这些问题通常会导致访问被拒绝(403 禁止)错误,此时 Amazon S3 会禁止访问资源。

有关拒绝访问(403 禁止)错误的常见原因,请参阅排查 Amazon S3 中的拒绝访问(403 禁止)错误