本部分介绍如何从 Amazon S3 存储桶下载对象。使用 Amazon S3,您将这些对象存储在一个或多个存储桶中,每个对象的大小最多为 5 TB。任何未归档的 Amazon S3 对象都可以实时访问。但对于已归档的对象,必须先进行还原,然后才能下载。有关下载归档对象的更多信息,请参阅下载归档对象。
您可以使用 Amazon S3 控制台、AWS Command Line Interface(AWS CLI)、AWS SDK 或 Amazon S3 REST API 下载单个对象。要从 S3 下载对象而无需编写任何代码或运行任何命令,请使用 S3 控制台。有关更多信息,请参阅 下载对象。
要下载多个对象,请使用 AWS CloudShell、AWS CLI 或 AWS SDK。有关更多信息,请参阅 下载多个对象。
如果您需要下载对象的一部分,则需要将 AWS CLI 与额外的参数结合使用,或者使用 REST API 来仅指定要下载的字节。有关更多信息,请参阅 下载对象的一部分。
如果您需要下载不属于您的对象,请让对象所有者生成一个允许您下载该对象的预签名 URL。有关更多信息,请参阅 从另一个 AWS 账户下载对象。
当您在 AWS 网络之外下载对象时,将收取数据传输费用。在同一个 AWS 区域中,AWS 网络内部的数据传输免费,但任何 GET
请求都将收取费用。有关数据传输成本和数据检索费用的更多信息,请参阅 Amazon S3 定价
下载对象
您可以使用 Amazon S3 控制台、AWS CLI、AWS SDK 或 REST API 下载单个对象。
本部分介绍如何使用 Amazon S3 控制台从 S3 存储桶下载对象。
注意
-
一次只能下载一个对象。
-
如果您使用 Amazon S3 控制台下载对象的键名以句点 (
.
) 结尾,则该句点将从下载对象的键名中删除。要保留所下载对象名称末尾的句点,您必须使用 AWS Command Line Interface(AWS CLI)、AWS SDK 或 Amazon S3 REST API。
从 S3 存储桶下载对象
-
登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在 Buckets(存储桶) 列表中,请选择要从中下载对象的存储桶的名称。
-
您可以使用以下任一方式从 S3 存储桶下载对象:
-
选中对象旁边的复选框,然后选择下载。如果您要将对象下载到特定文件夹,请在操作菜单中,选择下载为。
-
如果要下载对象的特定版本,请打开显示版本(位于搜索框旁边)。选中所需对象版本旁边的复选框,然后选择下载。如果您要将对象下载到特定文件夹,请在操作菜单中,选择下载为。
-
以下 get-object
示例将向您展示如何使用 AWS CLI 从 Amazon S3 下载对象。此命令从存储桶
获取对象 amzn-s3-demo-bucket1
。该对象将下载到名为 folder/my_image
的文件中。my_downloaded_image
aws s3api get-object --bucket
--key
amzn-s3-demo-bucket1
folder/my_image
my_downloaded_image
有关更多信息和示例,请参阅 AWS CLI 命令参考中的 get-object
有关如何使用 AWS SDK 下载对象的示例,请参阅《Amazon S3 API 参考》中的 Code examples。
有关使用不同 AWS SDK 的一般信息,请参阅《Amazon S3 API 参考》中的 Developing with Amazon S3 using the AWS SDKs。
您可以使用 REST API 从 Amazon S3 中检索对象。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 GetObject。
下载多个对象
您可以使用 AWS CloudShell、AWS CLI 或 AWS SDK 下载多个对象。
AWS CloudShell 是一个已经事先完成身份验证的浏览器式 Shell,您可以直接从AWS Management Console启动它。
有关 AWS CloudShell 的更多信息,请参阅《AWS CloudShell User Guide》中的What is CloudShell?。
重要
使用 AWS CloudShell,您的主目录的存储空间最高为每个 AWS 区域 1 GB。因此,您无法将存储桶与总大小超过此数量的对象同步。有关更多限制,请参阅《AWS CloudShell User Guide》中的 eService quotas and restrictions。
使用 AWS CloudShell 下载对象
-
登录 AWS Management Console,然后通过以下网址打开 CloudShell 控制台:https://console.aws.amazon.com/cloudshell/
. -
运行以下命令,将存储桶中的对象同步到 CloudShell。以下命令同步名为
的存储桶中的对象,并在 CloudShell 中创建一个名为amzn-s3-demo-bucket1
的文件夹。CloudShell 会将您的对象同步到这个文件夹。要使用此命令,请将temp
替换为您自己的信息。user input placeholders
aws s3 sync s3://
amzn-s3-demo-bucket1
./temp
注意
要执行模式匹配以排除或包含特定对象,您可以在
sync
命令中使用--exclude "
和value
"--include "
参数。value
" -
运行以下命令,将名为
的文件夹中的对象压缩到名为temp
的文件中。temp.zip
zip
temp.zip
-rtemp
/ -
选择操作,然后选择下载文件。
-
输入文件名
,然后选择下载。temp.zip
-
(可选)删除同步到 CloudShell 中
文件夹的temp
文件和对象。使用 AWS CloudShell,您可在每个 AWS 区域中拥有最高 1 GB 的持久性存储。temp.zip
您可以使用此示例命令来删除您的
.zip
文件和文件夹。要使用此示例命令,请将
替换为您自己的信息。user input placeholders
rm
temp.zip
&& rm -rftemp
/
此示例说明如何使用 AWS CLI 下载指定目录或前缀下的所有文件或对象。此命令将存储桶
中的所有对象复制到您的当前目录。要使用此示例命令,请使用您的存储桶名称代替 amzn-s3-demo-bucket1
。amzn-s3-demo-bucket1
aws s3 cp s3://
amzn-s3-demo-bucket1
. --recursive
以下命令将存储桶
中前缀 amzn-s3-demo-bucket1
下的所有对象下载到您的当前目录。它还使用 logs
--exclude
和 --include
参数仅复制带有后缀
的对象。要使用此示例命令,请将 .log
替换为您自己的信息。user input placeholders
aws s3 cp s3://
amzn-s3-demo-bucket1
/logs
/ . --recursive --exclude "*
" --include "*.log
"
有关更多信息和示例,请参阅 AWS CLI 命令参考中的 cp
有关如何使用 AWS SDK 下载 Amazon S3 存储桶中所有对象的示例,请参阅《Amazon S3 API 参考》中的 Code examples。
有关使用不同 AWS SDK 的一般信息,请参阅《Amazon S3 API 参考》中的 Developing with Amazon S3 using the AWS SDKs。
下载对象的一部分
您可以使用 AWS CLI 或 REST API 下载对象的一部分。为此,您需要使用额外的参数来指定要下载对象的哪一部分。
以下示例命令在名为
的存储桶中,对名为 amzn-s3-demo-bucket1
的对象中的字节范围执行 folder/my_data
GET
请求。在请求中,字节范围必须以 bytes=
为前缀。部分对象将下载到名为
的输出文件中。要使用此示例命令,请将 my_data_range
替换为您自己的信息。user input placeholders
aws s3api get-object --bucket
amzn-s3-demo-bucket1
--keyfolder/my_data
--range bytes=0-500
my_data_range
有关更多信息和示例,请参阅 AWS CLI 命令参考中的 get-object
有关 HTTP Range
标头的更多信息,请参阅 RFC 编辑器网站上的 RFC 9110
注意
Amazon S3 不支持在单个 GET
请求中检索多个数据范围。
您可以在 REST API 中使用 partNumber
和 Range
参数,从 Amazon S3 检索对象部分。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 GetObject。
从另一个 AWS 账户下载对象
您可以使用预签名 URL 授予对对象的限时访问权限,而不更新存储桶策略。
预签名 URL 可以在浏览器中输入,或者由程序用来下载对象。URL 使用的凭证是生成该 URL 的 AWS 用户的凭证。创建 URL 后,在该 URL 过期之前,任何拥有预签名 URL 的人都可以下载相应的对象。
您可以使用 Amazon S3 控制台,按照以下步骤生成预签名 URL 来共享对象。使用控制台时,预签名 URL 的最长过期时间为自创建时起 12 小时。
使用 Amazon S3 控制台生成预签名 URL
登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在左侧导航窗格中,选择存储桶。
-
在 Buckets(存储桶)列表中,请选择包含要为其生成预签名 URL 的对象的存储桶的名称。
-
在 Objects(对象)列表中,选择要为其生成预签名 URL 的对象。
-
在对象操作菜单上,请选择使用预签名 URL 共享。
-
指定您希望的预签名 URL 有效时间长度。
-
请选择 Create presigned URL(创建预签名 URL)。
-
出现确认消息时,URL 将自动复制到剪贴板。如果您需要再次复制预签名 URL,您将看到一个按钮,用于复制该 URL。
-
要下载对象,请将 URL 粘贴到任何浏览器中,此时机会尝试下载该对象。
有关预签名 URL 和其他创建预签名 URL 方法的更多信息,请参阅使用预签名 URL 下载和上传对象。
下载归档对象
要降低不经常访问的对象的存储成本,您可以对此类对象进行归档。当您归档对象时,它会被移动到低成本存储中,这意味着您无法实时访问它。要下载归档对象,您必须先还原该对象。
根据存储类的不同,您可以在几分钟或几小时内还原归档对象。您可以使用 Amazon S3 控制台、S3 批量操作、Amazon S3 REST API、AWS SDK 和 AWS Command Line Interface(AWS CLI)还原归档的对象。
有关说明,请参阅 恢复已归档的对象。您可在还原归档对象后下载它。
根据元数据下载对象
可以使用有条件读取请求添加前提条件,来根据对象的元数据下载该对象。可以根据对象的实体标签(ETag)或上次修改日期返回该对象。这可以将 S3 操作限制为自指定日期以来更新的对象,或者仅返回特定的对象版本。
可以将有条件写入用于 GetObject 或 HeadObject 请求。
有关有条件请求的更多信息,请参阅使用有条件请求向 S3 操作添加前提条件。
下载对象故障排查
当您尝试从 Amazon S3 下载对象时,权限不足、错误的存储桶或错误的 AWS Identity and Access Management(IAM)用户策略会导致出错。这些问题通常会导致访问被拒绝(403 禁止)错误,此时 Amazon S3 会禁止访问资源。
有关拒绝访问(403 禁止)错误的常见原因,请参阅排查 Amazon S3 中的拒绝访问(403 Forbidden)错误。